繁体   English   中英

WPF触发器/样式将覆盖另一个

[英]WPF Trigger / Style overrides another

我有一个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突出显示该行。 真好

我在ListViewItem上也有一个DataTrigger

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

如果测试为真,则播放一个很好的淡入淡出动画。 除了当我将鼠标移到“ test is true”的行上时,动画都会停止并且显示鼠标悬停样式,所有这些工作都可以。

有什么想法可以在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定义。 DataTriggerItemContStyle定义。

我尝试删除MouseOver样式触发器,但是由于我认为Listview已经定义了默认的MouseOver样式,因此无法正常工作,因此它会覆盖我的DataTrigger动画。

在花了几个小时解决这个问题之后,我终于找到了解决方法。 由于某些原因,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和一个附加的Setter作为背景:

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

终于和平了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM