2016-07-05 130 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比它更多的東西,但我厭倦了打字,它已經得到了我實際上要使用的所有東西。