WPF样式,创建在XAML中跨应用程序使用的样式页面

时间:2014-05-15 08:00:29

标签: c# wpf xaml datagrid

我查看过网络,看看是否有一个简单的解释我的问题。但是很多答案都是基于编写代码(C#),而我认为你不需要这样做。

我基本上想要一个样式页面,而不是复制和粘贴相同的代码,我可以引用该文件(有点像CSS)

基本上,我有一个具有这种风格的Datagrid标题

           <DataGridTextColumn.HeaderStyle>
              <Style TargetType="{x:Type DataGridColumnHeader}">
                 <Setter Property="HorizontalContentAlignment" Value="Center" />
                 <Setter Property="Foreground" Value="White"/>
                 <Setter Property="FontWeight" Value="Bold"/>
                 <Setter Property="Background" Value="LightBlue" />
              </Style>
           </DataGridTextColumn.HeaderStyle>

但目前我正在为我的应用中的每个DataGrid标头复制并粘贴此内容。当然有一种简单的方法可以阻止这种重复吗?

由于

3 个答案:

答案 0 :(得分:3)

如果您希望将 App.Resources 文件应用于所有 App.xaml,请在 DataGridColumnHeaders 文件下定义该样式}

<App.Resources>
   <Style TargetType="{x:Type DataGridColumnHeader}">
      ....
   </Style>
</App.Resources>

答案 1 :(得分:3)

基本上您正在寻找ResourceDictionary文件。它允许跨应用程序共享相同的样式,模板等。在您的例如中“{包含”来自ResourceDictionary的资源。 Window.Resources,您必须添加ResourceDictionary.MergedDictionaries部分,如下所示:

<ResourceDictionary.MergedDictionaries>
    <ResourceDictionary Source="pack://application:,,,/MyDll;component/Styles/slCommonStyles.xaml" />
    <ResourceDictionary Source="slGridBase.xaml" />        
    <ResourceDictionary Source="../Templates/slColumnTemplates.xaml" />    
</ResourceDictionary.MergedDictionaries>

第一个'include'使用pack uri语法。如果您“包含”来自其他DLL库的资源,则需要这样做。

答案 2 :(得分:1)

如果您希望将此样式应用于所有DataGridTextColumn,请在App.xaml中添加此样式而不使用x:Key in App Resources

<App.Resources>
   <Style TargetType="{x:Type DataGridColumnHeader}">
      <Setter Property="HorizontalContentAlignment" Value="Center" />
      <Setter Property="Foreground" Value="White"/>
      <Setter Property="FontWeight" Value="Bold"/>
       <Setter Property="Background" Value="LightBlue" />
    </Style>
</App.Resources>

或者您希望在选择性列标题上定义,在样式上定义x:key

<Style x:Key="MyHeaderStyle" TargetType="{x:Type DataGridColumnHeader}">
     <Setter Property="HorizontalContentAlignment" Value="Center" />
      <Setter Property="Foreground" Value="White"/>
      <Setter Property="FontWeight" Value="Bold"/>
       <Setter Property="Background" Value="LightBlue" />
    </Style>

并使用<DataGridTextColumn HeaderStyle="{StaticResource MyHeaderStyle}"

这样的风格