【发布时间】:2011-01-15 22:05:42
【问题描述】:
我有两种类型的文本需要遵循基于枚举的相似着色规则:
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>
然后样式会失败,因为(显然)在 Style 的 TargetType 属性中没有可使用的共同祖先类型。
由于这最终被认为是可配置的,因此目标是拥有一个 XAML 文档,该文档定义了这些文本块的颜色映射模式。因此,我不愿意使用定义相同映射的两种冗余样式(一种用于 Hyperlink,一种用于 TextBlock)。
所以...问题:如何在没有冗余样式 XAML 块的情况下一致地设置两种情况的样式?
【问题讨论】: