在 WPF 库上应用 Aero 样式
Apply Aero style on WPF library
我想在我的表单上强制使用 Aero 样式。我创建了一个 "WPF Class Library" 并向该表单添加了一个表单和控件。由于库将由第 3 方 C# 应用程序 运行 在不同的 OS 上调用,我想强制始终应用 Aero 样式。
但是因为它是一个 WPF class 库,所以我没有 App.xaml
可以放置我的资源字典的文件。
因此,我将它放在一个专门的自定义 Styles.xaml
中,在我的表格中我引用它
<Window.Resources>
<ResourceDictionary Source="Styles.xaml">
</ResourceDictionary>
</Window.Resources>
其中 Styles.xaml 看起来像
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:MyLib">
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/PresentationFramework.Aero;V4.0.0.0;component/themes/Aero.NormalColor.xaml"></ResourceDictionary>
</ResourceDictionary.MergedDictionaries>
并设置为“Build action: Embedded resource
”并存储在主项目文件夹中。我还在我的项目中添加了对 PresentationFramework.Aero
的引用。
当我从 C# 应用程序调用我的库表单时,我收到一条错误消息
设置 属性 'System.Windows.ResourceDictionary.Source' 抛出异常。行号'x'和行位置'y'
我做错了什么?
这应该适合你。
<ResourceDictionary Source="pack://application:,,,/PresentationFramework.Aero;component/themes/Aero.NormalColor.xaml" />
有关详细信息,请参阅这篇 MSDN 文章。
更新
在 PCL
中包含 ResourceDictionary
创建 ResourceDictionary
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/PresentationFramework.Aero;component/themes/Aero.NormalColor.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
<!-- store here your styles -->
</ResourceDictionary>
您可以从您的 PCL 在 WPF 应用程序中使用它
<Window x:Class="Test.Window"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window"
Height="300"
Width="300">
<Window.Resources>
<ResourceDictionary Source="pack://application:,,,/Your.Base.AssemblyName;component/YourResDictionaryFolder/Dictionary1.xaml" />
</Window.Resources>
<Grid>
</Grid>
</Window>
Your.Base.AssemblyName
= DLL 名称
YourResDictionaryFolder
= 创建 ResourceDictionary 的文件夹
Dictionary1.xaml
= 您在上面创建的文件名
我想在我的表单上强制使用 Aero 样式。我创建了一个 "WPF Class Library" 并向该表单添加了一个表单和控件。由于库将由第 3 方 C# 应用程序 运行 在不同的 OS 上调用,我想强制始终应用 Aero 样式。
但是因为它是一个 WPF class 库,所以我没有 App.xaml
可以放置我的资源字典的文件。
因此,我将它放在一个专门的自定义 Styles.xaml
中,在我的表格中我引用它
<Window.Resources>
<ResourceDictionary Source="Styles.xaml">
</ResourceDictionary>
</Window.Resources>
其中 Styles.xaml 看起来像
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:MyLib">
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/PresentationFramework.Aero;V4.0.0.0;component/themes/Aero.NormalColor.xaml"></ResourceDictionary>
</ResourceDictionary.MergedDictionaries>
并设置为“Build action: Embedded resource
”并存储在主项目文件夹中。我还在我的项目中添加了对 PresentationFramework.Aero
的引用。
当我从 C# 应用程序调用我的库表单时,我收到一条错误消息
设置 属性 'System.Windows.ResourceDictionary.Source' 抛出异常。行号'x'和行位置'y'
我做错了什么?
这应该适合你。
<ResourceDictionary Source="pack://application:,,,/PresentationFramework.Aero;component/themes/Aero.NormalColor.xaml" />
有关详细信息,请参阅这篇 MSDN 文章。
更新
在 PCL
中包含 ResourceDictionary创建 ResourceDictionary
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/PresentationFramework.Aero;component/themes/Aero.NormalColor.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
<!-- store here your styles -->
</ResourceDictionary>
您可以从您的 PCL 在 WPF 应用程序中使用它
<Window x:Class="Test.Window"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window"
Height="300"
Width="300">
<Window.Resources>
<ResourceDictionary Source="pack://application:,,,/Your.Base.AssemblyName;component/YourResDictionaryFolder/Dictionary1.xaml" />
</Window.Resources>
<Grid>
</Grid>
</Window>
Your.Base.AssemblyName
= DLL 名称
YourResDictionaryFolder
= 创建 ResourceDictionary 的文件夹
Dictionary1.xaml
= 您在上面创建的文件名