将默认样式应用于所有wpf窗口

时间:2017-05-12 14:20:03

标签: wpf

我有一个拥有20多个窗口的wpf应用程序,其中大部分用作对话框,我希望它们都具有相同的背景颜色。

我在资源字典中定义的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中,属性编辑器中的背景画笔显示&#34;继承&#34;,但值为&#34; White&#34;。我在Visual Studio中看到了所需的背景颜色,但是当我运行应用程序时,我仍然看到白色背景。谁能解释我在这里做错了什么? WindowBackgroundBrush正在适当地应用于其他控件。

请注意我是否将样式简化为

<Style TargetType="{x:Type Window}">
    <Setter Property="Background" Value="Aqua"/>
</Style>

Visual Studio将背景画笔显示为&#34;样式设置器&#34;作为值源并将Aqua显示为值源,但应用程序启动时窗口仍为白色。

1 个答案:

答案 0 :(得分:0)

你做的都是正确的。它在我的地方工作......你如何将风格应用到窗口?我申请如下..

<Window x:Class="WpfApplicationScratchpad.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApplicationScratchpad"
        mc:Ignorable="d"
        Title="MainWindow" Height="350" Width="525"  Style="{StaticResource Style1}">

这里Style1是你在资源字典中的风格。名称为“Style1”

<Style x:Key="Style1" TargetType="{x:Type Window}">
        <Setter Property="WindowStyle" Value="None"/>
        <Setter Property="AllowsTransparency" Value="True"/>
        <Setter Property="SnapsToDevicePixels" Value="true"/>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type Window}">
                    <Grid Background="Beige">
                        <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>