我有两种类型的文本需要遵循基于枚举的类似着色规则:
public enum Modes
{
A,
B,
C
}
带有DataTrigger
标记的样式用于着色:
<Style TargetType="SEE BELOW" x:Key="Coloring">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=.}" Value="A">
<Setter Property="Foreground" Value="Red" />
</DataTrigger>
<DataTrigger Binding="{Binding Path=.}" Value="B">
<Setter Property="Foreground" Value="Green" />
</DataTrigger>
<DataTrigger Binding="{Binding Path=.}" Value="C">
<Setter Property="Foreground" Value="Blue" />
</DataTrigger>
</Style.Triggers>
</Style>
一种使用场景是System.Windows.Documents.Hyperlink
带有嵌套的System.Windows.Controls.TextBlock
:
<Hyperlink><TextBlock/></Hyperlink>
另一个只是一个简单的TextBlock
:
<TextBlock Style="{StaticResource Coloring}" Text="yada"/>
当然,我可以为这两个TextBlock
元素设置样式:
<TextBlock Style="{StaticResource Coloring}" Text="yada"/>
<Hyperlink><TextBlock Style="{StaticResource Coloring}"/></Hyperlink>
但这无法为超链接案例的下划线设置样式。
如果我尝试在这两种类型中设置样式:
<TextBlock Style="{StaticResource Coloring}" Text="yada"/>
<Hyperlink Style="{StaticResource Coloring}"><TextBlock/></Hyperlink>
然后样式失败,因为(显然)没有共同的祖先类型用于TargetType
Style 的属性。
由于这最终被认为是可配置的,因此目标是拥有一个 XAML 文档,该文档定义了这些文本块的颜色映射模式。因此,我不愿意使用定义相同映射的两种冗余样式(一种用于 Hyperlink,一种用于 TextBlock)。
所以......问题:如何在没有多余的 Style XAML 块的情况下一致地设置两种情况的样式?