다음 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>