У меня есть следующий шаблон TabItem
, где TabItem
содержит изображение, источник которого зависит от свойства IsSelected
.Я выполняю это, связывая Image.Source
с TabItem.Header
, с Converter
, который преобразует текст заголовка в полное имя файла.(то есть заголовок «awb» станет «images / awb-white.png» или «images / awb-black.png» в зависимости от конвертера).
Этот код работает, но, похоже, имеетнекоторая ненужная избыточность.Все, что мне действительно нужно изменить, - это конвертер привязки 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>