2008-12-04 26 views
2

在我的LOB應用程序中,我通常使用容器包含大量不同的文本塊和文本框供用戶輸入數據。通常我需要爲每個控件應用一定的邊距或垂直/水平對齊。將樣式應用於海量項目的最佳方法是什麼?

比方說,我有網我的​​形式,看起來像這樣(很多標記被除名的簡潔)上:

<Grid> 
    <Grid.ColumnDefinitions.../> 
    <Grid.RowDefinitions.../> 

    <TextBlock Text="MyLabel" /> 
    <TextBox Text={Binding ...}/> 
    . 
    ' 
    <!-- Repated a bunch more times along with all of the Grid.Row, Grid.Column definitions --> 
</Grid> 

現在讓我們說我需要包含在我的網格每一個項目有保證金= 「3,1」VerticalContentAlignment =「Left」VerticalAlignment =「Center」。有幾種方法可以實現這一點:

  1. 直接在每個控件上設置屬性 - 很壞!不允許剝皮或集中樣式。
  2. 使用x:Key =「MyStyleName」創建樣式並將樣式應用於每個控件。更好的...使樣式和皮膚集中化更易於管理,但仍需要大量標記,並且可能會變得笨拙。
  3. 創建一個全局樣式(即不指定一個x:Key並設置TargetType = {x:Type TextBox/TextBlock} - BAD !!問題是它會影響應用程序中的所有控件,這可能會對菜單,網格以及其他使用文本塊和文本框的控件造成不利影響
  4. 創建一個面向Grid的樣式並明確設置依賴性屬性值,如<Setter Property="Frameworkelement.Margin" Value="3,1" />不壞......它正確地將樣式應用於其內容中的每個元素,但也直接將其應用於網格本身...不完全是我想要的

那麼你採取什麼方法,爲什麼?

回答

0

您可以使用#4,但顯式覆蓋網格上的這些屬性。

4

您可以將「全局」樣式放入網格的Resources部分,從而限制其影響。爲了重複使用在不同的地點「全球性」的風格,把它們放在一個非默認的資源字典,並把它作爲MergedDictionary

Styles.xaml

<Grid> 
    <Grid.ColumnDefinitions.../> 
    <Grid.RowDefinitions.../> 

    <Grid.Resources> 
     <ResourceDictionary> 
      <ResourceDictionary.MergedDictionaries> 
       <ResourceDictionary Source="Styles.xaml" /> 
      </ResourceDictionary.MergedDictionaries> 

      <!-- other resources here --> 

     </ResourceDictionary> 
    </Grid.Resources> 

    ... 
</Grid> 

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <Style x:Key="{x:Type ...}"> ... </Style> 
</ResourceDictionary> 
形式

相關問題