Есть ли способ изменить один атрибут шаблона в триггере в WPF? - PullRequest
1 голос
/ 09 января 2012

Поэтому я пытаюсь заставить мой TabItem отображать другое изображение в зависимости от того, выбрано оно или нет. Сейчас у меня все работает, используя следующий код:

<Window.Resources>
    <local:UnselectedImageFilenameConverter x:Key="UnselectedImageFilenameConverter" />
    <local:SelectedImageFilenameConverter x:Key="SelectedImageFilenameConverter" />
    <Style TargetType="TabItem">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="TabItem">
                    <Image Source="{TemplateBinding Header, Converter={StaticResource UnselectedImageFilenameConverter}}" Stretch="None" />
                </ControlTemplate>
            </Setter.Value>
        </Setter>
        <Style.Triggers>
            <Trigger Property="IsSelected" Value="True">
                <Setter Property="Template" >
                    <Setter.Value>
                        <ControlTemplate TargetType="TabItem">
                            <Image Source="{TemplateBinding Header, Converter={StaticResource SelectedImageFilenameConverter}}" Stretch="None" />
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Trigger>
        </Style.Triggers>
    </Style>
</Window.Resources>

Однако это кажется излишним. Я изменяю весь шаблон, когда все, что мне нужно, это изменить источник изображения. Кажется, что должен быть более краткий способ сделать это, но пока не повезло. Есть идеи?

1 Ответ

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

Вы можете использовать шаблон управления вместо стиля. В нем вы можете определить триггер, который изменяет источник изображения в соответствии с вашей прихотью.

<ControlTemplate TargetType="{x:Type TabItem}" x:Key="TabItemTemplate">
    <Image x:Name="TabImage" Source="{Binding Something}"/>
    <ControlTemplate.Triggers>
        <Trigger Property="Selector.IsSelected" Value="True">
            <Setter Property="Source" TargetName="TabImage" Value="{Binding SomethingElse}"/>
        </Trigger>
    </ControlTemplate.Triggers>
</ControlTemplate>

В приведенном выше шаблоне, если вы хотите, чтобы шаблон применялся к каждому элементу вкладки по умолчанию, удалите атрибут x: Key.

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