У меня есть два типа текста, которые должны следовать похожим правилам раскраски на основе перечисления:
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
стиля.
Поскольку предполагается, что это в конечном итоге конфигурируемая вещь, цель состоит в том, чтобы получить документ XAML, который определяет режим отображения цветов для этих текстовых блоков. Поэтому я не хочу иметь два избыточных стиля (один для гиперссылки и один для TextBlock), которые определяют одно и то же отображение.
Итак ... вопрос: Как можно последовательно стилизовать оба случая без избыточных блоков стиля XAML?