0
我有以下TabItem
模板,其中TabItem
包含圖像的來源取決於IsSelected
屬性。我通過將Image.Source
與TabItem.Header
綁定,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>