2009-04-08 37 views
2

當我創建WPF應用程序時,很快我的XAML開始膨脹。將XAML放入樣式中的策略是什麼?

然後以HTML/CSS的方式處理XAML /樣式問題,尋找重複的代碼並將其打包成我放入我的Window.Resources部分的樣式。

這是別人正在做的方式,還是現在有更好的方式在XAML中?看起來下面的兩個模塊只在兩個小詞上有區別,似乎我可以將它放在某種功能用戶控件(這是一個左側菜單),以便當我的菜單中有25個元素時我可以只有25行相同的名稱,也許點擊目標。

也許當我移動這MVVM這個問題會照顧自己與數據綁定(這是currrently只是一個硬編碼的原型),這樣我就可以在保持菜單項的名稱集合在我ViewModel然後它在ItemsControl中動態地創建菜單?

臃腫的XAML文件只是生活中的事實與WPF應用程序?

當您創建WPF應用程序時,您有什麼樣的XAML樣式策略?

Window.Resources(文件的頂部):

<Window.Resources> 
    <Style x:Key="Link" TargetType="Button"> 
     <Setter Property="Cursor" Value="Hand"/> 
     <Setter Property="Foreground" Value="#555"/> 
     <Setter Property="Background" Value="Transparent"/> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="Button"> 
        <TextBlock TextDecorations="Underline" 
       Text="{TemplateBinding Content}" 
       Background="{TemplateBinding Background}"/> 
        <ControlTemplate.Triggers> 
         <Trigger Property="IsPressed" Value="True"> 
          <Setter Property="Foreground" Value="Red"/> 
         </Trigger> 
        </ControlTemplate.Triggers> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 
</Window.Resources> 

電流XAML:

<Expander HorizontalAlignment="Left" Header="File" VerticalAlignment="Top" ExpandDirection="Down" Width="200" Padding="2"> 
    <Expander.Background> 
     <LinearGradientBrush> 
      <GradientStop Color="#bbb" Offset="0"/> 
      <GradientStop Color="#ccc" Offset="1"/> 
     </LinearGradientBrush> 
    </Expander.Background> 
    <Border CornerRadius="5"> 
     <Border.Background> 
      <LinearGradientBrush> 
       <GradientStop Color="#ccc" Offset="0"/> 
       <GradientStop Color="#bbb" Offset="1"/> 
      </LinearGradientBrush> 
     </Border.Background> 
     <StackPanel HorizontalAlignment="Stretch" VerticalAlignment="Top"> 
      <Button Click="buttonClose_Click" 
       Style="{StaticResource Link}" 
       Margin="10 3 3 3" 
       Content="Close"> 
      </Button> 
     </StackPanel> 
    </Border> 
</Expander> 

<Expander HorizontalAlignment="Left" Header="Customers" VerticalAlignment="Top" ExpandDirection="Down" Width="200" Padding="2"> 
    <Expander.Background> 
     <LinearGradientBrush> 
      <GradientStop Color="#bbb" Offset="0"/> 
      <GradientStop Color="#ccc" Offset="1"/> 
     </LinearGradientBrush> 
    </Expander.Background> 
    <Border CornerRadius="5"> 
     <Border.Background> 
      <LinearGradientBrush> 
       <GradientStop Color="#ccc" Offset="0"/> 
       <GradientStop Color="#bbb" Offset="1"/> 
      </LinearGradientBrush> 
     </Border.Background> 
     <StackPanel HorizontalAlignment="Left" VerticalAlignment="Top"> 
      <Button Click="btnAppPage_Click" 
       Tag="CustomerAdd" 
       Style="{StaticResource Link}" 
       Margin="10 3 3 3" 
       Content="Create Customer"/> 
     </StackPanel> 
    </Border> 
</Expander> 

回答

1

簡單:識別重複,並將其移動到控制。該控件可以具有在運行時組成所需變體所需的任何屬性。它可以通過控制來重新模板化。

+0

我一直在使用UserControls加載內容頁面(左側菜單是每個頁面是一個用戶控件),但不是頁面上的一點點重複,你只是指定義的用戶控件,如下所述:http: //msdn.microsoft.com/en-us/magazine/cc163421.aspx – 2009-04-08 08:49:55

0

此外,您可以識別重複並將它們移動到資源中。一種資源可以很容易引用另一種

相關問題