C#WPF:ResourceDictionary已在设计器中加载,但在调试模式下编译时未加载

问题描述

文件 App.xaml

<Application x:Class="MyApp.App">
    <Application.Resources>
        <ResourceDictionary Source="Themes/Dark.xaml"/>
    </Application.Resources>
</Application>

文件:Dark.xaml

<ResourceDictionary>
    <SolidColorBrush x:Key="Background.Primary">Red</SolidColorBrush>
</ResourceDictionary>

文件:Main.xaml

<Window>
    <Window.Resources>
        <Style targettype="local:Main">
            <Setter Property="Background" Value="{DynamicResource Background.Primary}"/>
        </Style>
    </Window.Resources>
</Window>

文件结构:

Root
  App.xaml
  Main.xaml
  Themes
    Dark.xaml

在设计器中,我可以注意到主窗口的背景变为红色,但是当我编译项目时,背景只是透明的!

解决方法

将隐式Style添加到窗口的Resources字典中时,它将应用于具有匹配类型的窗口的所有子项

但是Main窗口显然不是其自身的子项。

您应该设置Style属性,而不要将Style添加到Resources

<Window>
    <Window.Style> !!! <--
        <Style TargetType="local:Main">
            <Setter Property="Background" Value="{DynamicResource Background.Primary}"/>
        </Style>
    </Window.Style>
</Window>

或者,您可以直接设置Background属性:

<Window ... Background="{DynamicResource Background.Primary}" />
,

如果需要设置窗口背景,请尝试:

<Window ... >    
    <Window.Background>
        <StaticResource ResourceKey="Background.Primary" />
    </Window.Background>  
    ...
</Window>

或者这样也可以:

<Window ...        
    Background="{StaticResource Background.Primary}">
    ...
</Window>

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...