1

我有一个ListView这样ItemContainerStyle定义的:

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

然后在 中baseListViewStyle,我定义了一些基本样式以应用于我ListView的 s,包括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吗?

TIA

更新:

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动画。

4

1 回答 1

0

好吧,在这个问题上花了几个小时后,我终于找到了解决方法。由于某种原因,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>

终于和平了。

于 2010-05-19T13:21:37.453 回答