【发布时间】:2016-07-05 17:23:22
【问题描述】:
我有一个包含许多标签、组合框和文本框的网格。 我在每个单元格中都放置了一个标签和组合框。
最佳做法是什么: 1. 将 Combo Box 和标签放在一个堆栈面板中,然后放置一个单元格 2. 只需将两个控件直接放在一个网格单元格中
这两种方法的优缺点是什么?
谢谢
【问题讨论】:
我有一个包含许多标签、组合框和文本框的网格。 我在每个单元格中都放置了一个标签和组合框。
最佳做法是什么: 1. 将 Combo Box 和标签放在一个堆栈面板中,然后放置一个单元格 2. 只需将两个控件直接放在一个网格单元格中
这两种方法的优缺点是什么?
谢谢
【问题讨论】:
将两个控件放在同一个单元格中的缺点是第二个控件将叠加在第一个控件之上(如果您尝试过,您会注意到这一点),解决此问题的唯一方法是通过给他们奇怪的利润或将它们都放在StackPanel中,这就是为什么每个人都只是把它们放在StackPanel中。
我的建议是:定义如下所示的样式,并将其放入 App.xaml (或 App.xaml 本身,如果您处于盗版心态)中的某个全局事物中:
<Style x:Key="FieldStyle" TargetType="HeaderedContentControl">
<Setter Property="Margin" Value="8,3" />
<Setter Property="MinWidth" Value="300" />
<Setter Property="IsTabStop" Value="False" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="HeaderedContentControl">
<StackPanel Orientation="Vertical">
<Label
FontWeight="Bold"
Content="{TemplateBinding Header}"
/>
<ContentPresenter
Margin="8,0,0,0"
/>
</StackPanel>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
并像这样使用它:
<HeaderedContentControl
Header="Contact Name"
Grid.Row="0"
Grid.Column="0"
Style="{StaticResource FieldStyle}"
>
<TextBox Text="{Binding ContactName}" />
</HeaderedContentControl>
<HeaderedContentControl
Header="Contact Phone"
Grid.Row="1"
Grid.Column="0"
Style="{StaticResource FieldStyle}"
>
<TextBox Text="{Binding ContactPhone}" />
</HeaderedContentControl>
这让您可以轻松更改所有标签/控件对的格式。我通常会自己在StackPanel 或WrapPanel 中打乱这些东西,但如果Grid 对您的布局有意义,请务必使用它。
这种风格的模板可以而且可以说应该是TemplateBinding 比它更多的东西,但我厌倦了打字,它有我真正要使用的所有东西。
【讨论】: