Можно ли изменить конвертер привязки в триггере в WPF? - PullRequest
0 голосов
/ 09 января 2012

У меня есть следующий шаблон TabItem, где TabItem содержит изображение, источник которого зависит от свойства IsSelected.Я выполняю это, связывая Image.Source с TabItem.Header, с Converter, который преобразует текст заголовка в полное имя файла.(то есть заголовок «awb» станет «images / awb-white.png» или «images / awb-black.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>

1 Ответ

2 голосов
/ 09 января 2012

Насколько мне известно, это невозможно.

Но вы можете изменить способ обработки этого, создав только один преобразователь, но передав исходное значение и статус выбора через MultiBinding. (Конвертер должен быть IMultiValueConverter). Является ли это хорошей идеей, конечно, под вопросом ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...