Xamlで作ったアイコンの色をバインドする方法
XamlのPathで作られたアイコンはFillまたはStrokeをバインドして、色を変えることができます。HTMLのアイコンフォントやSVGアイコンと似たようなノリですね。しかし、Triggerを組み合わせたバインディングは少々癖があります。親要素の状態で色を変えたいときは、直接バインドするのは面倒っていうか無理です。Setterでリソースを書き換えるついでにスタイルを変えてやろうと思ったけれど、これもまたダメ。StyleでResourcesを切り替えることはできないようです。
<ControlTemplate.Triggers> <Trigger Property="IsSelected" Value="True"> <Setter Property="Foreground" Value="{DynamicResource AccentColorBrush}"/> <Setter Property="Resources"> <Setter.Value> <!-- ここでごにょごにょするのは無理らしい --> </Setter.Value> </Style> </Trigger> <!-- 略 --> <ControlTemplate.Triggers>
じゃあどうするか…と思っていたら、こういうのを発見。
wpf - How to change a path fill (on a button) with triggers in XAML - Stack Overflow
ふむ…どこかのプロパティを経由してバインドさせればいいようです。ちなみに上の例ではButtonのプロパティを経由させてForegroundの色設定をPathのFillにバインドしています。
私の場合、正解はこうでした。
<Style TargetType="Path"> <Setter Property="Fill" Value="{Binding Foreground, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=TabItem}}" /> </Style>