2016-07-05 79 views
2

我有一个网格,其中包含许多标签,组合框和文本框。 我在每个单元格中都放置了标签和组合框。wpf Grid最佳实践

什么是最好的做法: 1.将组合框和一个堆叠面板的标签,然后把它放在一个单元2简单地说这两个控件直接在网格单元

有哪些优势和两种方法的缺点?

谢谢

回答

3

在同一小区内将两者一起控制的缺点是,第二个将在第一(你会注意到,如果你尝试过)之上进行叠加,并解决这个问题的唯一方法就是给予他们奇异的利润或者将他们都放在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> 

这可以让您轻松地更改所有标签/控件对的格式。我通常只是在我自己的StackPanelWrapPanel这些东西一巴掌,但如果一个Grid是有意义的布局,通过一切手段去与它。

该风格的模板可以和可以证明应该是TemplateBinding比它更多的东西,但我厌倦了打字,它已经得到了我实际上要使用的所有东西。