如何让 class 库中的 generic.xaml 仅与 TargetType 一起使用?
How can I have generic.xaml from class library be used with TargetType only?
我创建了一个 WPF class 库,其中包含我想在两个 WPF 应用程序中引用和使用的主题。
这是一个示例内容,取自我在 class 库中的 \Themes\generic.xaml
文件:
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<Style TargetType="Border">
<Setter Property="Background">
<Setter.Value>
<SolidColorBrush Color="Tan"/>
</Setter.Value>
</Setter>
</Style>
</ResourceDictionary>
这是我添加到 class 库中的 AssemblyInfo.cs
文件:
using System.Windows;
[assembly: ThemeInfo(
ResourceDictionaryLocation.SourceAssembly, //where theme specific resource dictionaries are located
//(used if a resource is not found in the page,
// or application resource dictionaries)
ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located
//(used if a resource is not found in the page,
// app, or any theme specific resource dictionaries)
)]
然而,我的 WPF 应用程序没有使用我在 class 库中定义的样式。
我错过了什么?尽管我的 WPF 应用程序引用了 class 库项目,但为什么我的 WPF 应用程序未使用我的 class 库中的样式?
Themes/generic.xaml 命名约定(仅)用于查找在源程序集(或特定主题程序集,具体取决于[ThemeInfo]
属性)。
它不用于将样式应用于其他控件或元素,例如 Border
,它在 PresentationFramework.dll
中定义。
因此,要将 Style
应用到应用中的 Border
元素,您需要合并 App.xaml
:
中的资源字典
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/YourAssembly;component/Themes/generic.xaml.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
我创建了一个 WPF class 库,其中包含我想在两个 WPF 应用程序中引用和使用的主题。
这是一个示例内容,取自我在 class 库中的 \Themes\generic.xaml
文件:
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<Style TargetType="Border">
<Setter Property="Background">
<Setter.Value>
<SolidColorBrush Color="Tan"/>
</Setter.Value>
</Setter>
</Style>
</ResourceDictionary>
这是我添加到 class 库中的 AssemblyInfo.cs
文件:
using System.Windows;
[assembly: ThemeInfo(
ResourceDictionaryLocation.SourceAssembly, //where theme specific resource dictionaries are located
//(used if a resource is not found in the page,
// or application resource dictionaries)
ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located
//(used if a resource is not found in the page,
// app, or any theme specific resource dictionaries)
)]
然而,我的 WPF 应用程序没有使用我在 class 库中定义的样式。
我错过了什么?尽管我的 WPF 应用程序引用了 class 库项目,但为什么我的 WPF 应用程序未使用我的 class 库中的样式?
Themes/generic.xaml 命名约定(仅)用于查找在源程序集(或特定主题程序集,具体取决于[ThemeInfo]
属性)。
它不用于将样式应用于其他控件或元素,例如 Border
,它在 PresentationFramework.dll
中定义。
因此,要将 Style
应用到应用中的 Border
元素,您需要合并 App.xaml
:
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/YourAssembly;component/Themes/generic.xaml.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>