您正在寻找的是 ResourceDictionary。这比仅仅将样式放入 App.Resources 元素要灵活得多,并且可以让您更好地控制样式的范围。
将样式放入 App.Resources 有许多缺点:
- 它很快就会填满并变成一个庞大而臃肿的列表
- 每种款式均在全球范围内发售。你可能不想要那样。
使用 ResourceDictionary 很大程度上解决了这个问题:
- 样式可以保留在一个或多个程序集中,并可以在应用程序之间重复使用
- 通过包含(或不包含)资源字典,您可以控制添加到页面的样式
- 您可以按照对您来说合乎逻辑的方式对样式和模板进行分组和组织
资源字典与 CSS 文件的映射非常接近。基本上,您可以使用它们来存储各种内容:
并且,与样式表一样,您可以将它们应用于整个控件类型或使用命名样式的控件
<UserControl.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/Project.Ui;component/Styles/DialogStyles.xaml"/>
<ResourceDictionary Source="pack://application:,,,/Project.Ui;component/Icons/Error.xaml"/>
<ResourceDictionary Source="pack://application:,,,/Project.Ui;component/Icons/Exit.xaml"/>
<ResourceDictionary Source="pack://application:,,,/Project.Ui;component/Icons/Warning.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</UserControl.Resources>
定义资源字典:
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:po="http://schemas.microsoft.com/winfx/2006/xaml/presentation/options"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
xmlns:Infrastructure="clr-namespace:Hsbc.Ice.Shell.Infrastructure"
xmlns:Ui="clr-namespace:Hsbc.Ice.Shell.Infrastructure.Ui">
<LinearGradientBrush x:Key="{x:Static Ui:Brushes.SelectedRowBackgroundBrushKey}" StartPoint="0.5,0" EndPoint="0.5,1"
po:Freeze="True">
<GradientStop Color="#4D5F6E96" Offset="0"/>
<GradientStop Color="#2191A0BE" Offset="0.2"/>
<GradientStop Color="#2191A0BE" Offset="0.45"/>
<GradientStop Color="#745F6E96" Offset="1"/>
</LinearGradientBrush>
</ResourceDictionary>