2012-01-09 100 views
0

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

回答

2

據我所知,這是不可能的。

但是,您可以通過創建一個轉換器來改變處理方式,但通過MultiBinding傳遞原始值和選擇狀態。 (該轉換器需要是IMultiValueConverter)。這是否是一個好主意當然是有問題的......

相關問題