在 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 = 您在上面创建的文件名