的文档Grid https://msdn.microsoft.com/en-us/library/windows/apps/windows.ui.xaml.controls.grid.aspx类状态:
从 Windows 10 开始,网格定义了新的边框属性,使您可以在网格周围绘制边框,而无需使用额外的边框元素。新属性包括 Grid.BorderBrush、Grid.BorderThickness、Grid.CornerRadius 和 Grid.Padding。
这是否使Border https://msdn.microsoft.com/en-us/library/windows/apps/windows.ui.xaml.controls.border.aspx阶级多余?如果我可以用网格做同样的事情,为什么我还要使用边框and如果我选择的话,以网格方式布置孩子?
EDIT
我大体同意巴特的回答 https://stackoverflow.com/a/39676183/734040,但有几件事我想谈谈。
首先,其他布局控件(如 StackPanel)确实具有类似 Border 的属性,如 BorderBrush、BorderThickness 和 CornerRadius,因此 Grid 并不是唯一获得这些新功能的布局控件。但他们不是attached由 Border 类提供的属性(或与 Border 类有任何关系)。
其次,我也认为,如果我只想向像图像这样的简单控件添加边框,那么使用像 Grid 这样的复杂布局控件就太过分了。但可以肯定的是,这些布局控件将被优化,这样,如果它们仅包含单个子项而没有任何特殊的布局约束,则对布局渲染速度的任何影响都可以忽略不计。因此,当网格只有一个子项时,使用网格而不是边框不会影响性能。
最后,我决定找出 Grid 是如何实现边框外观的。我创建了一个简单的页面,其中包含一个带有边框的网格和一个矩形子项,如下所示:
<Grid Background="Red" BorderBrush="Blue" BorderThickness="10">
<Rectangle Width="50" Height="50" HorizontalAlignment="Left" VerticalAlignment="Top" Fill="Yellow"/>
</Grid>
具有以下渲染:
在检查实时可视化树时,Grid 类不会向可视化树添加任何其他元素来形成边框外观:
我怀疑它用来创建边框外观的任何机制都与边框控件的作用相同(也许它在合成层中创建了一个额外的视觉效果)。
所以我不太相信“更简单”的边框控件会更好用,因为它看起来网格控件已经相当高性能了。我看不到任何网格控件向可视化树添加任何额外开销的证据(与边框实现相同效果相比)。
到目前为止,我能想到为什么应该使用边框而不是网格的唯一原因是为了表达含义。边框控件的作用很明显,它在单个元素周围添加边框。网格是一个布局控件,用于在网格内布置子元素(碰巧,网格也能够在其子元素周围添加边框作为额外的好处)。