是否可以更改WPF中触发器中绑定的转换器
本文关键字:触发器 绑定 转换器 WPF 是否 | 更新日期: 2023-09-27 18:19:46
我得到了以下TabItem
模板,其中TabItem
包含一个图像,其来源取决于IsSelected
属性。我通过将Image.Source
绑定到TabItem.Header
,并使用Converter
将标题文本转换为完整的文件名来实现这一点。(即,"awb"的标题将变为"images/awbwhite.png"或"images/awpblack.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>
据我所知,这是不可能的。
但是,您可以通过只创建一个转换器,但通过MultiBinding
传递原始值和选择状态来更改处理方式。(转换器需要是IMultiValueConverter
)。这是否是一个好主意当然值得怀疑。。。