Триггер/стиль WPF переопределяет другой

У меня есть 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>

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

Любые идеи, как я могу переопределить этот стиль в моем 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.


person ozczecho    schedule 18.05.2010    source источник
comment
Что оживляет ваша причудливая анимация? Свойство Foreground тоже? А где у тебя DataTrigger определяется? В стиле ListViewItem по умолчанию или это местный стиль? Более важно: определены ли триггеры IsMouseOver и DataTrigger в одном и том же стиле?   -  person gehho    schedule 18.05.2010
comment
gehho ... спасибо за внимание. Ответы в исходном вопросе.   -  person ozczecho    schedule 18.05.2010
comment
Хммм, тогда я не вижу ошибки. Прости...   -  person gehho    schedule 18.05.2010


Ответы (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>

Наконец-то мир.

person ozczecho    schedule 19.05.2010