【问题标题】:C# WPF: ResourceDictionary loaded in designer, but not loaded when I compile in debug modeC# WPF:ResourceDictionary 在设计器中加载,但在调试模式下编译时未加载
【发布时间】:2020-10-08 11:48:29
【问题描述】:

文件: 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

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

【问题讨论】:

  • 你能写下完整的 Main.xaml 吗?那里一定有什么冲突……
  • local:Main是当前窗口,可以使用TargetType="Window"
  • 隐含的Style 只会应用于具有匹配类型的窗口的任何child。看我的回答。

标签: c# wpf wpf-controls resourcedictionary


【解决方案1】:

当您将隐式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}" />

【讨论】:

    【解决方案2】:

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

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

    或者这也可以:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-11-10
      • 1970-01-01
      • 1970-01-01
      • 2019-07-08
      • 2021-01-03
      • 1970-01-01
      • 2012-02-18
      相关资源
      最近更新 更多