【发布时间】:2017-10-11 21:50:17
【问题描述】:
我有一个 wpf 应用程序,它有 20 多个窗口,其中大部分用作对话框,我希望它们都具有相同的背景颜色。
我在资源字典中定义了 Window 的类型化样式,如下所示
<Style TargetType="{x:Type Window}">
<Setter Property="SnapsToDevicePixels" Value="true"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Window}">
<Grid Background="{StaticResource WindowBackgroundBrush}">
<AdornerDecorator>
<ContentPresenter/>
</AdornerDecorator>
<ResizeGrip x:Name="WindowResizeGrip" HorizontalAlignment="Right" VerticalAlignment="Bottom" Visibility="Collapsed" IsTabStop="false"/>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="ResizeMode" Value="CanResizeWithGrip">
<Setter TargetName="WindowResizeGrip" Property="Visibility" Value="Visible"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
我已将字典包含在应用程序和每个窗口的资源中,如下所示
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/Resources/Resources.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
<Window.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/Resources/Resources.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Window.Resources>
在 Visual Studio 中,属性编辑器中的背景画笔显示“继承”,但值显示“白色”。我在 Visual Studio 中看到了所需的背景颜色,但是当我运行应用程序时,我仍然看到白色背景。谁能解释我在这里做错了什么? WindowBackgroundBrush 正在正确应用到其他控件。
请注意,如果我将样式简化为只是
<Style TargetType="{x:Type Window}">
<Setter Property="Background" Value="Aqua"/>
</Style>
Visual Studio 将背景画笔显示为“样式设置器”作为值源,并将 Aqua 显示为值源,但应用启动时窗口仍为白色。
【问题讨论】:
-
@EdPlunkett 这就是
<Application.Resources>标签的作用。 -
@XAMlMAX 我的智商很低。对不起!
-
@EdPlunkett np。我们都有那些日子;-)
-
我刚刚尝试重现您的问题,它也发生在我身上。我记得为窗口设置样式并不像控件那样容易。它与
InitialiseComponents()有关,但我不能指望它。 -
谢谢。很高兴不只是我。最初的评论是否表明不需要将字典添加到 windows 资源,因为它已经添加到应用程序资源中?
标签: wpf