WPF Trigger / Style переопределяет другой

У меня есть ListView с ItemContainerStyle определяется как таковой:

                            <ListView Width="auto" 
                              SelectionMode="Single"
                              ItemContainerStyle="{StaticResource ItemContStyle}"
                               .... 

Затем в baseListViewStyleЯ определил некоторые базовые стили для применения к ListViewс, в том числе Style спусковой крючок:

<Style x:Key="baseListViewStyle" TargetType="ListViewItem">
    <Setter Property="Height" Value="20" />
    <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
    <Style.Triggers>
        <Trigger Property="IsMouseOver" Value="True">
            <Setter Property="Foreground" Value="Red" />
        </Trigger>
    </Style.Triggers>
</Style>

Trigger здесь выделяется строка, когда мышь находится над ней. Ницца.

у меня тоже есть DataTrigger на ListViewItem:

                <Style.Triggers>
                <DataTrigger Binding="{Binding IsTestTrue}" Value="True">
                    <DataTrigger.EnterActions>
                        <BeginStoryboard Storyboard="{StaticResource SomeFunkyAnimation}" />
                    </DataTrigger.EnterActions>
                </DataTrigger>

Если проверка верна, то проигрывается приятная небольшая анимация затухания. Это все работает за исключением того, что когда я наведу курсор мыши на строку, в которой "test is true", анимация останавливается и отображается стиль наведения мыши.

Любые идеи, как я могу переопределить этот стиль в моем DataTrigger?

ТИА

Обновить:

SomeFunkyAnimation оживляет цвет фона. XAML для этого здесь:

            <Style x:Key="ItemContStyle" TargetType="{x:Type ListViewItem}" BasedOn="{StaticResource baseListViewStyle}">
            <Style.Resources>
                <Storyboard x:Key="SomeFunkyAnimation" FillBehavior="Stop">
                    <ColorAnimation Storyboard.TargetProperty="Background.Color" RepeatBehavior="Forever"  From="Red" To="Pink" Duration="0:0:3"/>
                </Storyboard>
            </Style.Resources>

MouseOver триггер определяется в baseListViewStyle, DataTrigger определяется в ItemContStyle,

Я пытался удалить MouseOver триггер стиль, но это не сработало, как я считаю, Listview имеет значение по умолчанию MouseOver стиль уже определен, поэтому он отменяет мой DataTrigger анимация.

1 ответ

Решение

Через несколько часов моей жизни я решил эту проблему. По какой-то причине ColorAnimation просто прекращает анимацию после наведения мыши. Не знаю почему, может быть, ошибка wpf, кто знает. Решение было перенастроить мою анимацию. Ниже делает то же самое:

                    <Storyboard x:Key="SomeFunkyAnimation" FillBehavior="Stop">
                    <DoubleAnimation Storyboard.TargetProperty="Background.Opacity" RepeatBehavior="Forever" AutoReverse="true"  From="0.2" To="1.0" Duration="0:0:1"/>
                </Storyboard>

А затем тот же DataTrigger с дополнительным сеттером для фона:

                <DataTrigger Binding="{Binding IsTestTrue}" Value="True">
                    <DataTrigger.EnterActions>
                        <BeginStoryboard Storyboard="{StaticResource SomeFunkyAnimation}" />
                    </DataTrigger.EnterActions>
                    <Setter Property="Background" Value="Red" />
                </DataTrigger>

Мир наконец.

Другие вопросы по тегам