列挙に基づいて同様の色付け規則に従う必要がある2種類のテキストがあります。
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>
1つの使用シナリオはSystem.Windows.Documents.Hyperlink
、ネストされたSystem.Windows.Controls.TextBlock
:
<Hyperlink><TextBlock/></Hyperlink>
もう1つは単純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ドキュメントを作成することです。したがって、同じマッピングを定義する2つの冗長なスタイル(1つはハイパーリンク用、もう1つはTextBlock用)を使用するのは気が進まない。
だから...質問:冗長なスタイルXAMLブロックなしで両方のケースを一貫してスタイル設定するにはどうすればよいですか?