Wpf XAML中硬编码大小的最佳实践

Wpf XAML中硬编码大小的最佳实践,wpf,silverlight,xaml,Wpf,Silverlight,Xaml,我知道,在WPF中,您希望使控件的大小尽可能灵活,以便它们可以根据上下文流动和扩展(如CSS) 但我遇到的大多数代码示例都是硬编码大小,如本示例中的高度: <Grid.ColumnDefinitions> <ColumnDefinition Width="0.5*"/> <ColumnDefinition Width="0.5*"/> </Grid.ColumnDefinitions> <Grid.RowDefinitions

我知道,在WPF中,您希望使控件的大小尽可能灵活,以便它们可以根据上下文流动和扩展(如CSS)

但我遇到的大多数代码示例都是硬编码大小,如本示例中的高度:

<Grid.ColumnDefinitions>
    <ColumnDefinition Width="0.5*"/>
    <ColumnDefinition Width="0.5*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
    <RowDefinition Height="31"/>
    <RowDefinition Height="31"/>
    <RowDefinition Height="31"/>
</Grid.RowDefinitions>

将每行的高度指定为“31”不是一种不应该效仿的糟糕做法吗?还是有这样的原因?或者是作者在设计视图中创建了这些示例,只是没有清理硬编码的高度


有没有人在元素大小调整方面(特别是在使用*语法方面)有什么最佳实践,可以让刚开始使用XAML的人从一开始就养成良好的习惯,在XAML中使用dinamic大小是一种最佳实践,因为正如您所说的,WPF的概念与固定尺寸无关。在您的特定示例中,我不知道是否需要编写器提供,请记住,仍有一些情况涉及硬编码值(可能是自定义菜单栏或您希望保持其大小一致的面板)。符号“2*”表示该值将是其他列值的两倍,因此,在每列中使用星形符号不是很有用

如果您正在寻找一些示例,我可以向您介绍这些示例(但如果您在谷歌上搜索“WPF星星大小”或类似内容,您会找到其他示例)。
另外,如果你想找一本关于WPF的好书,我可以肯定地告诉你。这是我最喜欢的作品之一,它写得很好,充满了彩色的例子,涵盖了WPF的每一个方面。

除了Stefano提到的某些情况外,在大多数情况下使用动态尺寸更好。您应该记住WPF是一项相当新的技术,很多人都在尝试学习它。通常,在学习一项新技术时,人们会先把自己知道的东西写出来(例如,用C#编写,就像用Java编写一样),然后只有在学习了一点之后才开始以“正确”的方式编写代码。总是带着一颗盐去写博客文章


然而,从您发布的代码来看,我猜他们使用Blend创建XAML。它总是在做一些愚蠢的事情,比如添加行高和将两列都设为“0.5*”

有时您无法摆脱显式大小调整,特别是当您使用设计器资产时,这些资产通常在表达式设计之类的工具中转换为大小调整路径。如果要使用显式大小设置控件的布局,然后像处理动态大小的对象一样翻转并使用它,则应使用Viewbox

在WPF中,在Viewbox中包装一个大小合适的控件将负责动态执行变换,以便它能够正确地伸缩。这可能会影响性能,但我不知道这比动态定义大小差多少。在Silverlight中没有现成的Viewbox,但您可以使用Silverlight工具箱的原型Viewbox为您提供同等的体验