为什么WPF窗口总是获得默认样式?

时间:2013-08-02 17:55:50

标签: wpf styles window

我尝试在XAML中为WPF Style设置Window。我可以在VS Designer中看到我的更改,但是当我运行应用程序时,它将始终获得默认的Style

不工作:

<Style TargetType="Window">
    <Setter Property="Background" Value="Red"/>
</Style>

如果我使用密钥Style并将Style应用于Window,那么它就可以了。

工作:

<Style x:Key="window" TargetType="Window">
    <Setter Property="Background" Value="Red"/>
</Style>

有任何理由需要StyleWindow提供密钥吗?

任何人都可以解释一下发生了什么吗?

3 个答案:

答案 0 :(得分:1)

有必要在Window中添加构造:

Style="{StaticResource {x:Type Window}}"

样式位于文件App.xaml

<Application x:Class="WindowStyleHelp.App"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         StartupUri="MainWindow.xaml">

    <Application.Resources>
        <!-- In this case, the key is optional --> 
        <Style x:Key="{x:Type Window}" TargetType="{x:Type Window}">
            <Setter Property="Background" Value="Pink" />
        </Style>
    </Application.Resources>
</Application>

XAML中的窗口:

<Window x:Class="WindowStyleHelp.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="350" Width="525"
    Style="{StaticResource {x:Type Window}}"
    WindowStartupLocation="CenterScreen">

    <Grid>

    </Grid>
</Window>

答案 1 :(得分:0)

尝试

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

答案 2 :(得分:0)

  

样式中的目标类型不会应用于派生类型。

您可以使用StaticResource在所有窗口上应用密钥 -

<Application x:Class="WpfApplication4.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:local="clr-namespace:WpfApplication4"
             StartupUri="MainWindow.xaml">
    <Application.Resources>
        <Style x:Key="MyStyle" TargetType="Window">
            <Setter Property="Background" Value="Red"/>
        </Style>
    </Application.Resources>
</Application>

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
        Style="{StaticResource MyStyle}">

OR

在这样的资源中定义style for your type (derived window) -

<Application x:Class="WpfApplication4.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:local="clr-namespace:WpfApplication1"
             StartupUri="MainWindow.xaml">
    <Application.Resources>
        <Style TargetType="{x:Type local:MainWindow}">
            <Setter Property="Background" Value="Red"/>
        </Style>
    </Application.Resources>
</Application>