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