在窗口上设置WPF样式

inkz8wg9  于 2022-12-27  发布在  其他
关注(0)|答案(1)|浏览(169)

我用wpf写了一个XAML代码,我在window.resourse中定义了一个样式,如下所示

<Window x:Class="WpfApp1.Test"
    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:self="clr-namespace:WpfApp1"
     xmlns:system="clr-namespace:System;assembly=mscorlib"
     xmlns:local ="clr-namespace:WpfApp1"
     mc:Ignorable="d"
     Height="400 " Width="450"  >

<Window.Resources>
    <Style TargetType="{x:Type Window}">
        <Setter Property="Title" Value="Hello my friens!"/>
    </Style>
</Window.Resources>

<Grid>
</Grid>

在这里,测试是我的窗口类名称。当我运行时,一切正常,但当我改变以上这一点

<Window.Resources>
    <Style TargetType="{x:Type Window}">
        <Setter Property="Title" Value="Hello my friends!"/>
    </Style>
</Window.Resources>

在设计窗口,标题显示为值=“你好我的朋友!"但当我运行应用程序,标题变成空的。这会发生什么?什么是不同的btwTargetType="{x:类型窗口}"TargetType="{x:类型本地:测试}"

  • 不是每个都是指Windows类型吗?*
jhdbpxl9

jhdbpxl91#

只要在样式中指定targettype,样式就会自动应用到所有你定义的类型的对象,但是,这对基类不起作用。
在你的例子中,TargetType="{x:Type Window}"会自动将标题“Hello my friends!”应用到所有窗口。然而,你的窗口类型不是Window,而是WpfApp1.Test。Window只是使用的基类。这就是为什么样式不会自动应用到窗口的原因。
如果你使用TargetType="{x:Type local:Test}",它将自动应用到所有WpfApp1.Test类型的对象,这对你的窗口是正确的。样式的自动应用只对特定的类型有效,对基类无效。
你也可以指定一个键属性,然后告诉你的窗口它应该使用这个样式。在这种情况下,你也可以使用x:Type Window,因为这样样式就被显式地应用了。例如:

<Window x:Class="WpfApp1.Test"
    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:self="clr-namespace:WpfApp1"
     xmlns:system="clr-namespace:System;assembly=mscorlib"
     xmlns:local ="clr-namespace:WpfApp1"
     mc:Ignorable="d"
     Height="400 " Width="450" Style="{DynamicResource MyStyle}">

    <Window.Resources>
        <Style TargetType="{x:Type Window}" x:Key="MyStyle">
            <Setter Property="Title" Value="Hello my friends!"/>
        </Style>
    </Window.Resources>

相关问题