在WPF库上应用Aero样式

时间:2018-03-20 08:59:52

标签: c# wpf resourcedictionary

我想在表单上强制使用Aero样式。我创建了一个“WPF类库”,并为此表单添加了一个表单和控件。由于该库将由在不同操作系统上运行的第三方C#应用程序调用,我想强制始终应用Aero风格。

但由于它是一个WPF类库,我没有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”

我做错了什么?

1 个答案:

答案 0 :(得分:3)

这应该适合你。

<ResourceDictionary Source="pack://application:,,,/PresentationFramework.Aero;component/themes/Aero.NormalColor.xaml"</ResourceDictionary>

请参阅此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>
    </ResourceDictionary.MergedDictionaries>
  </ResourceDictionary>

  <!-- store here your styles -->

</ResourceDictionary>

您可以在WPF应用程序中的PCL中使用它

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