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