我在x:Key引用的资源字典中有一个外部样式资源。它有一个x:TargetType指定一个目标(TextBlock)。是否可以将其应用于包含TextBlock的控件并使该控件中的所有TextBlock元素都应用了样式?
谢谢, 罗伯特
答案 0 :(得分:4)
最简单的方法是在Control中定义一个基于外部样式资源的Style,但不要指定x:Key,只需指定TargetType。
<Style TargetType="{x:Type TextBlock}" BasedOn="{StaticResource SomeOtherStyle}">
如果没有密钥,它将自动应用于控件中的所有TextBlock。
答案 1 :(得分:1)
要扩展其他评论。当您使用Brandon显示的语法时:
<Style TargetType="{x:Type TextBlock}" BasedOn="{StaticResource SomeOtherStyle}">
BasedOn =“”基本上是一种风格的“继承”。这种风格的基础设置将是它所基于的风格。这使您能够使用仅适用于此情况的选项来扩充样式,或者根据您的情况需要重新定义样式的范围。
您将字典文件中的样式作为键控样式,只能显式应用。通过“重新定义”您的样式,Brandon现在可以通过省略键来重新定义范围,从而使其适用于该样式范围内的目标类型的所有元素。因此,如果您的所有TextBlock都在Grid中,您可以使用以下内容:
<Grid.Resources>
<Style TargetType="{x:Type TextBlock}" BasedOn="{StaticResource MyBaseStyle}">
</Style>
</Grid.Resources>
答案 2 :(得分:0)
不,但您可以自动将样式应用于特定类型的所有元素,如下所示:
<!-- Applies to all buttons in scope of this style -->
<Style x:Key="{x:Type Button}" TargetType="{x:Type Button}">
...
</Style>
答案 3 :(得分:0)
我认为这就是你要找的东西:
您的自定义用户控件“test”:
<UserControl x:Class="WpfApplication4.test"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Height="300" Width="300">
<Grid>
<TextBlock>test</TextBlock>
</Grid>
</UserControl>
您的样式文档“Res / Styles.xaml”
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Style TargetType="{x:Type TextBlock}">
<Style.Setters>
<Setter Property="Foreground" Value="Blue" />
</Style.Setters>
</Style>
您的主要窗口或父级:
<Window x:Class="WpfApplication4.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:uc="clr-namespace:WpfApplication4"
Title="Window1" Height="300" Width="300">
<Window.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Res/Styles.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Window.Resources>
<Grid>
<uc:test></uc:test>
</Grid>
自定义控件“test”中的文本块现在显示为蓝色前景。