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

本文关键字:样式 应用程序 创建 XAML WPF | 更新日期: 2023-09-27 18:03:23

我已经浏览了整个网络,看看是否有一个简单的解释我的问题。但很多答案都是基于编写代码(c#),我认为你不需要这样做。

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

基本上,我有一个Datagrid Header的样式为

           <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头在我的应用程序。当然有一个简单的方法来阻止这种重复?

谢谢

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

App.xaml 文件中定义 App.Resources 下的样式,如果您希望它应用于所有 DataGridColumnHeaders

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

基本上你正在寻找ResourceDictionary文件。它允许跨应用程序共享相同的样式、模板等。将ResourceDictionary中的资源"包含"在您的eg中。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'使用包uri语法。这是必需的,如果你是'包括'资源从另一个DLL

如果你想让这个样式应用到所有的DataGridTextColumn,在App.xaml的App Resources中添加这个样式,不带x:Key

<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}"