无法在窗口本身上应用WPF主题

时间:2012-07-26 10:09:46

标签: wpf themes

我正在尝试从Windows Presentation Foundation (WPF) CodePlex项目中应用ExpressionDark主题。

我已将文件ExpressionDark.xaml添加到Themes子文件夹中,并更改了我的App.xaml文件以引用此文件:

<Application.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary
                Source="Themes/ExpressionDark.xaml" />
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Application.Resources>

当我运行程序时,样式将应用于所有控件,但不应用于窗口本身。窗口的背景保持白色。我理解的是,样式适用于Window类,但不适用于派生类。

要解决此问题,我尝试在app.xaml文件中创建一个新样式,以便继承自定义窗口类的Windows样式:

<Application.Resources>
    <ResourceDictionary>
        <Style
            TargetType="{x:Type local:MainWindow}"
            BasedOn="{StaticResource {x:Type Window}}" />
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary
                Source="Themes/ExpressionDark.xaml" />
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Application.Resources>

结果完全相同。

我也尝试了WPF: Adventures in Theming (Part 2)的建议。我添加到我的窗口定义:

<Window
    x:Class="MyProject.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:vm="clr-namespace:MyProject.ViewModel"
    Title="MainWindow"
    Height="350"
    Width="525"
    Style="{DynamicResource {x:Type Window}}" />

没有更多的成功。

缺少什么?

PS:不知道是否重要,但我的窗口的孩子是网格。

2 个答案:

答案 0 :(得分:3)

使用Window XAML中的动态资源指定背景

<Window x:Class="HellowWorld.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Hellow World" Height="614" Width="821"
        Background="{DynamicResource WindowBackgroundBrush}">

答案 1 :(得分:2)

我最后一次检查主题中没有Window样式。