使用XAML设置窗口背景颜色

时间:2014-05-21 12:56:18

标签: c# wpf xaml

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

在此窗口中,我插入资源字典

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

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

<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>

1 个答案:

答案 0 :(得分:2)

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

希望这会有所帮助......从我能看到的内容中找不到更好的解决方案。