使用XAML设置窗口背景颜色

本文关键字:背景 颜色 窗口 设置 XAML 使用 | 更新日期: 2023-09-27 18:04:21

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

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

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

在全局。我有以下代码:

<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设置窗口背景颜色

OK…这是因为你的窗口实际上是一个派生自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>

希望这有助于…在我看来,没有更好的解决办法。