WPF Trigger / Style переопределяет другой - PullRequest
1 голос
/ 18 мая 2010

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

0 голосов
/ 19 мая 2010

Ну, после того, как я потратил несколько часов своей жизни на эту проблему, я наконец нашел решение. По какой-то причине 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>

Мир наконец.

...