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

时间:2009-01-27 10:19:15

标签: wpf silverlight xaml

我知道在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开始的人可以从一开始就遵循良好习惯?

3 个答案:

答案 0 :(得分:1)

一般来说,在XAML中使用dinamic大小是最佳实践,因为正如您所说,WPF的概念与固定维度无关。在您的特定示例中,我不知道是否需要来自编写者,请记住仍有一些涉及硬编码值的情况(可能是自定义菜单栏或您想要保持其大小一致的面板)。符号“2 *”表示该值将是其他列值的两倍,因此,使用每列中的星号表示法并不是非常有用。

如果您正在寻找一些示例,我可以向您发送这些two sites(但如果您在Google上搜索“WPF星号”或类似内容,您会找到其他人)。 另外,如果您正在寻找一本关于WPF的非常好的书,我肯定会指向Windows Presentation Foundation by Adam Nathan。这是我最喜欢的,它写得很好,充满了彩色的例子,涵盖了WPF的每一个方面。

答案 1 :(得分:1)

在大多数情况下,使用动态尺寸会更好,除非在某些情况下,Stefano指出。您应该记住,WPF是一项相当新的技术,很多人都在努力学习它。通常,在学习新技术时,人们将首先制作他们所知道的东西(例如,用C#编写,就像它是Java一样),然后只有在他们学会了一点之后才开始以“正确”的方式编写代码。总是带着一丝博客的帖子。

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

答案 2 :(得分:0)

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

在WPF中,在Viewbox中包装一个大小的控件将负责动态执行转换,以便它可以正确扩展。这可能具有性能影响,但我不知道它比动态定义大小有多糟糕。在Silverlight中没有开箱即用的Viewbox,但您可以使用Silverlight Toolkit的原型Viewbox为您提供相同的体验。