WPF Application.Resource在设计时应用但不在运行时应用(没有合并字典)

时间:2013-08-14 17:05:53

标签: c# wpf

我正在尝试为我的应用程序创建一些自定义外观,而不创建整个主题。 我使用默认窗口和以下App.xaml

创建了一个WPF 4.5应用程序
<Application x:Class="WpfBGTest.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             StartupUri="MainWindow.xaml">
    <Application.Resources> 
            <Style TargetType="Window">
                <Setter Property="Background" Value="Yellow" />
            </Style>

    </Application.Resources>
</Application>

完全默认的窗口代码

<Window x:Class="WpfBGTest.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">

    <Grid>
    </Grid>
</Window>

通过这样做,我在设计时看到我的Window.xaml是黄色的。 但是运行应用程序时Window会失去黄色并返回灰色(当前窗口主题?)

这里发生了什么?如何在不为每个控件添加显式StaticResource标记的情况下自定义我的应用程序?我的风格有一个目标类型,没有键。我不明白为什么设计时间与运行时间差别很大。

我已经阅读了有关合并词典的问题,但上面的代码基本上是一个带有一种风格的vanilla WPF应用程序。

编辑:我已经使用Snoop看到在决定要获取什么背景时使用DefaultStyle。但为什么?观察Dependecy属性优先级列表:http://msdn.microsoft.com/en-us/library/ms743230.aspx我的应用程序样式应该在默认样式之前选择

1 个答案:

答案 0 :(得分:1)

好的,通过阅读下面的帖子,brader24的链接是正确的。这是一个派生类型问题,就像你不能在Control上设置Foreground,你不能在Window上设置Background,因为它没有传播到我的特定窗口

解决方案帖子: https://stackoverflow.com/a/6902225/2416394

编辑:这是我解决的问题。我会尽快将其标记为已解决。