Dec*_*oon 7 xaml windows-10 uwp
Grid类的文档说明:
从Windows 10开始,Grid定义了新的边框属性,使您可以在不使用其他Border元素的情况下在网格周围绘制边框.新属性是Grid.BorderBrush,Grid.BorderThickness,Grid.CornerRadius和Grid.Padding.
这会使Border类多余吗?为什么我会永远想使用边界,如果我可以做同样的事情用一个网格,并在网格的方式铺陈的孩子,如果我这样选择?
编辑
我一般都同意Bart的回答,但我想谈谈一些事情.
首先,其他布局控件(如StackPanel)确实具有类似Border的属性,例如BorderBrush,BorderThickness和CornerRadius,因此Grid不是获得这些新特权的唯一布局控件.但它们不是Border类提供的附加属性(或者与Border类有任何关系).
其次,我也认为如果我只想在像图像这样的简单控件中添加边框,那么使用像Grid这样的复杂布局控件会有些过分.但是,这些布局控件肯定会进行优化,如果它们只包含一个没有任何特殊布局约束的子节点,那么对布局渲染速度的任何影响都可以忽略不计.因此,当它只有一个子节点时,使用Grid而不是Border应该不会影响性能.
最后,我决定找出Grid如何实现边框外观.我创建了一个包含带边框和单个Rectangle子节点的Grid的简单页面,如下所示:
<Grid Background="Red" BorderBrush="Blue" BorderThickness="10">
<Rectangle Width="50" Height="50" HorizontalAlignment="Left" VerticalAlignment="Top" Fill="Yellow"/>
</Grid>
Run Code Online (Sandbox Code Playgroud)
使用以下渲染:
在检查实时可视树时,Grid类不会向可视树添加任何其他元素以使边框显示:
我怀疑它用于创建边框外观的任何机制都与Border控件的相同(也许它在合成层中创建了一个额外的Visual).
所以我并不是真的相信"更简单"的边框控件会更好用,因为它看起来像Grid控件已经非常高效.我看不到网格控件的任何证据,为视觉树添加任何额外的开销(与边框相比,可以实现相同的效果).
到目前为止,我能想到为什么我应该使用Border而不是Grid的唯一原因是表达意义.很明显边框控件的作用是,在单个元素周围添加边框.网格是一种布局控件,用于在网格中布置子元素(正如它所发生的那样,它还能够在其子元素周围添加边框作为额外的奖励).
设计 UI 时的第一个问题应该是我是否需要一个Grid或另一个布局控件(StackPanel、RelativePanel、Canvas、 ...),基于每个控件的具体行为(请参阅MSDN)。请注意, 旁边的Grid、 以及 也StackPanel具有RelativePanel附加Border属性。这些附加属性有助于您避免在 XAML 树中添加另一个“冗余”控件来包装布局控件。
为什么该Border控件没有过时?假设您想要图像周围有一个边框(该图像与其他项目一起位于上述任何布局控件内,因此您无法重用布局控件的边框)。现在你有2个选择:
Border控件中。Grid(或其他布局控件)中并滥用附加属性。我的措辞应该很清楚哪一个最好:选择边框控件。经验法则是:使视觉树尽可能小。选择最简单的控件来完成任务。将图像放置在图像中Grid只是为了使其周围有边框,这会增加视觉树中的额外开销。
| 归档时间: |
|
| 查看次数: |
527 次 |
| 最近记录: |