2012-01-09 12 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

私の知る限り不可能です。

しかし、これを処理する方法を変更するには、コンバーターを1つだけ作成し、元の値と選択ステータスの両方をMultiBindingに渡します。 (変換器はIMultiValueConverterである必要があります)。それが良いアイデアであるかどうかはもちろん疑問です...

関連する問題