2012-01-09 3 views
0

다음 TabItem 템플릿이 있는데 TabItem 이미지의 소스가 IsSelected 속성에 의존하는 이미지가 포함되어 있습니다. TabItem.HeaderImage.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> 

답변

2

내 지식으로는 불가능합니다.

그러나 변환기를 하나만 생성하고 원래 값과 선택 상태를 모두 MultiBinding을 통해 전달하면 처리 방법을 변경할 수 있습니다. 변환기는 IMultiValueConverter이어야합니다. 그것이 좋은 생각인지 여부는 물론 의심 스럽습니다 ...

관련 문제