我已经定义了键入的Textblock样式(而不是键值),因此它适用于所有文本块。
<Style TargetType="{x:Type TextBlock}">
<Setter Property="FontFamily" Value="MyFancyFont"/>
<Setter Property="FontSize" Value="13.333" />
<Setter Property="Foreground" Value="Gray" />
</Style>
现在我有一个,例如,TreeViewItem,我想将其显示为蓝色背景,并在选择时显示为深色背景的白色前景。
<!--part of the treeviewitem template-->
<Trigger Property="IsSelected" Value="true">
<Setter Property="Foreground" Value="White"/>
<Setter Property="Background" Value="Black"/>
</Trigger>
定义文本块的本地样式不适用于选择树视图项目时的情况,因为项目中的文本块仍在拾取键入的样式。
有没有一种好方法可以做到这一点,同时仍然将文本块样式保持为“已键入”?
答案 0 :(得分:3)
this问题可能会对您有所帮助。它显示了如何覆盖隐式样式。
好的,我理解你的问题并且我没有真正的直接解决方案,但无论如何我会告诉你我是如何处理这些事情的:
你知道,隐式样式是作用域的,这意味着:
<Grid>
<Grid.Resources>
<Style TargetType="{x:Type TextBlock}">
<Setter Property="FontFamily" Value="MyFancyFont"/>
</Style>
</Grid.Resources>
<TextBlock>textblock with MyFancyFont</TextBlock>
</Grid>
<TextBlock>textblock with normal font</TextBlock>
我通常会尝试在主窗口的资源中避免使用TextBlock的这种隐式样式。相反,我可能会这样做:
<Application bunch="ofStuff">
<Application.Resources>
<Style TargetType="{x:Type TextBlock}" x:Key="TextBlockStandardStyle">
<Setter Property="FontFamily" Value="MyFancyFont"/>
</Style>
</Application.Resources>
</Application>
然后在子区域,这种风格可以隐含,不会造成任何伤害,我会写:
<Grid>
<Grid.Resources>
<Style TargetType="{x:Type TextBlock}" BasedOn="{StaticResource TextBlockStandardStyle}"/>
</Grid.Resources>
<TextBlock>textblock with MyFancyFont</TextBlock>
</Grid>
这样我可以根据自己的需要调整范围。也许这种方法可以让你跳过树视图的隐式样式,这样你就可以使用你的触发器了!