私はTabItem
テンプレートを持っています。TabItem
には、そのソースがIsSelected
プロパティに依存する画像が含まれています。私はTabItem.Header
にImage.Source
をバインドし、ヘッダーテキストを完全なファイル名に変換するConverter
を付けてこれを達成します。 (つまり、「awb」のヘッダはコンバータに応じて「images/awb-white.png」または「images/awb-black.png」になります)。WPFのトリガでバインディングのコンバータを変更することはできますか?
このコードは機能しますが、不要な冗長性があるようです。変更する必要があるのは、Image.Source
のバインディングのコンバーターです。結合自体は全体ではありません。 (RelativeSourceとPathは同じです)。冗長性なしでこれを達成する方法はありますか?
<Window.Resources>
<local:UnselectedImageFilenameConverter x:Key="UnselectedImageFilenameConverter" />
<local:SelectedImageFilenameConverter x:Key="SelectedImageFilenameConverter" />
<ControlTemplate TargetType="TabItem" x:Key="TabItemTemplate">
<Image x:Name="TabImage" Source="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Header, Converter={StaticResource UnselectedImageFilenameConverter}}" Stretch="None"/>
<ControlTemplate.Triggers>
<Trigger Property="Selector.IsSelected" Value="True">
<Setter TargetName="TabImage" Property="Source" Value="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Header, Converter={StaticResource SelectedImageFilenameConverter}}"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Window.Resources>
<TabControl>
<TabItem Header="awb" Template="{StaticResource TabItemTemplate}">
<Grid/>
</TabItem>
<TabItem Header="av" Template="{StaticResource TabItemTemplate}">
<Grid/>
</TabItem>
</TabControl>