Триггер для IsChecked не запускает - PullRequest
0 голосов
/ 30 октября 2011

Я хочу изменить значок кнопки ToggleButton (содержимое Fluent RibbonBar ) в зависимости от его свойства IsChecked. Теперь я написал следующий фрагмент стиля:

<Fluent:ToggleButton.Style>
    <Style BasedOn="{StaticResource RibbonButtonStyle}" TargetType="{x:Type Fluent:ToggleButton}">
        <Setter Property="OverridesDefaultStyle" Value="True"/>
        <Style.Triggers>
            <DataTrigger Binding="{Binding  RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Fluent:ToggleButton}}, Path=IsChecked}" Value="False">
                <Setter Property="Icon" Value="{StaticResource ResourceKey=Style.Images.Pined}"/>
            </DataTrigger>
            <DataTrigger Binding="{Binding  RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Fluent:ToggleButton}}, Path=IsChecked}" Value="True">
                <Setter Property="Icon" Value="{StaticResource ResourceKey=Style.Images.Unpined}"/>
            </DataTrigger>
        </Style.Triggers>
    </Style>
</Fluent:ToggleButton.Style>

Проблема в том, что триггер плохо загружает изображение. Проблема не в том, что IsChecked не актуализирует себя, я уже проверял это. И также я не устанавливаю свойство icon где-либо еще. Ресурсы изображений также работают нормально, если я использую их в другом месте.

Информация для перестроения: я поместил ToggleButton в Backstage в качестве DataTemplate RibbonListBox, помещенного в BackstageTabItem.

Ответы [ 2 ]

1 голос
/ 30 октября 2011

Поскольку это стиль для кнопки переключения, вам не требуется привязка findancestor - вы должны использовать self. И на самом деле, поскольку IsChecked является DP, вы можете просто использовать триггер - например, <Trigger Property="IsChecked" Value="False">

0 голосов
/ 31 октября 2011

Вам абсолютно необходимо , чтобы удалить свойство Icon из объявления элемента управления, поскольку оно будет переопределять все, что пытается сделать стиль из-за приоритета .

Но эти DataTriggers не будут работать, привязка будет искать предка, сама исключает , поэтому вы должны изменить их так же, как уже указывалось AndrewS. Только если оба условия соблюдены, у вас есть шанс заставить это работать (хотя могут быть даже дополнительные помехи).

...