我在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>
答案 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>
希望这会有所帮助......从我能看到的内容中找不到更好的解决方案。