【问题标题】:Setting window background color with XAML使用 XAML 设置窗口背景颜色
【发布时间】:2014-05-21 12:56:17
【问题描述】:

我在 WPF 中有一个标准 XAML 样式的窗口(

在这个窗口中我插入一个资源字典

 <Window.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="Style/Global.xaml" />
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Window.Resources>

在 Global.xaml 字典中,我有以下代码:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

  <Style TargetType="Window">
      <Setter Property="Background" Value="Red"/>            
   </Style>
</ResourceDictionary>

任何地方都没有异常。除了它不起作用之外,当我编译并运行该应用程序时,窗口背景显示为默认白色。但是在 Visual Studio 的设计器选项卡中,您可以看到窗口的预览,背景颜色正确更改为红色。我不明白。 我没有在任何可能覆盖窗口背景颜色的地方插入任何其他样式。 那么它怎么可能在预览选项卡中正常工作,但是当我实际运行该应用程序时,它却没有?我在这里做错了什么?


这是整个窗口的代码:

<Window x:Class="Apptest.EditBook"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="EditBook" Height="300" Width="300">
 <Window.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="Style/Global.xaml" />
            <ResourceDictionary Source="Style/Controls.xaml" />
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
  </Window.Resources>
        <Grid>

   </Grid>
 </Window>

【问题讨论】:

  • 请发布窗口的 XAML。
  • 好的,我发布了整个代码,但它是一个没有内容的空测试窗口,所以没有什么可以破坏我认为的任何东西
  • 并且只是为了完整......控制字典中有什么?
  • 只是一些按钮样式。但这不是导致它的原因,因为我试图完全删除它的链接,但它仍然没有工作。
  • 只是为了检查......您的 app.xaml StartUpUri 属性是否仍设置为 MainWindow.xaml?

标签: c# wpf xaml


【解决方案1】:

好的...所以这是因为您的窗口实际上是从 Window 派生的类型...

public partial class EditBook : Window { }

目标类型尚不适用于派生类型,因此您需要为样式添加一个键并将其添加到您创建的每个要使用该样式的窗口中......

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

  <Style TargetType="Window" x:Key="MyWindowStyle">
      <Setter Property="Background" Value="Red"/>            
   </Style>
</ResourceDictionary>

那么您需要在窗口中应用样式...

<Window x:Class="Apptest.EditBook"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="EditBook" Height="300" Width="300" Style="{StaticResource MyWindowStyle}">
 <Window.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="Style/Global.xaml" />
            <ResourceDictionary Source="Style/Controls.xaml" />
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
  </Window.Resources>
        <Grid>

   </Grid>
 </Window>

希望这会有所帮助...据我所知,没有更好的解决方案。

【讨论】:

  • 我明白了。好吧,这很糟糕,但我可以忍受。但是,在 Visual Studio 的预览选项卡中,它怎么可能真的有效呢?
  • 好问题..虽然说实话...我不知道。
猜你喜欢
  • 2011-01-07
  • 2015-10-23
  • 2021-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-19
  • 2014-01-22
  • 1970-01-01
相关资源
最近更新 更多