触发器事件不再被触发后,DoubleAnimation Height未返回到原始值

本文关键字:Height 返回 原始 DoubleAnimation 不再 事件 触发器 | 更新日期: 2023-09-27 18:20:56

我正试图在我的列表框中添加一些样式,当创建列表框时,它有一个项目的大小,当鼠标悬停时,它应该增加高度以容纳5个项目,到目前为止还不错,但由于当用户将鼠标悬停在它上面转到另一个字段时会变得很烦人,所以看到它增长并恢复到原来的大小会很烦人。

所以我决定为这个ListBox尝试使用DoubleAnimation的Storyboards。我到达这里:

    <Style TargetType="ListBox">
        <Setter Property="VerticalAlignment" Value="Top" />
        <Setter Property="Height" Value="20" />
        <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Disabled" />
        <Style.Triggers>
            <Trigger Property="IsMouseOver" Value="True">
                <Trigger.EnterActions>
                    <BeginStoryboard>
                        <Storyboard BeginTime="0:0:.25">
                            <DoubleAnimation Storyboard.TargetProperty="Height" From="20" To="85" Duration="0:0:0"/>
                        </Storyboard>
                    </BeginStoryboard>
                </Trigger.EnterActions>
                <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Auto" />
            </Trigger>
        </Style.Triggers>
    </Style>

好的,行了。太好了,我几乎已经感觉自己是职业选手了。但当我去参加测试时,我遇到了问题。当鼠标不再结束时,列表框将不会返回到其原始大小。所以我决定反其道而行之,尝试使用Property="IsMouseOver" Value="False"其中CCD_ 2和CCD_。ListBox不会移动。

所以我尝试了一个我在StackOverflow中看到的关于DataTemplate.Triggers的答案,但得到了相同的结果。

我不知道还有什么可以尝试的,因为我在WPF方面的知识匮乏每次都会妨碍我。

有什么好的替代方案?提前感谢,欢迎发表意见。

触发器事件不再被触发后,DoubleAnimation Height未返回到原始值

Trigger.ExitActions 中使用额外返回的Storyboard

<Trigger.ExitActions>
    <BeginStoryboard>
        <Storyboard BeginTime="0:0:.25">
            <DoubleAnimation Storyboard.TargetProperty="Height"
                             From="85" To="20" Duration="0:0:0"/>
        </Storyboard>
    </BeginStoryboard>
</Trigger.ExitActions>

否则,默认情况下Storyboard会保持该值。请参见FillBehavior特性。


或者,如果IsMouseOver为true,则可以设置FillBehavior="Stop"并设置新的Height值,就像对ScrollViewer.VerticalScrollBarVisibility所做的那样。

<Style.Triggers>
    <Trigger Property="IsMouseOver" Value="True">
        <Trigger.EnterActions>
            <BeginStoryboard>
                <Storyboard>
                    <DoubleAnimation Storyboard.TargetProperty="Height" From="20" To="85"
                                     Duration="0:0:0.5" FillBehavior="Stop" />
                </Storyboard>
            </BeginStoryboard>
        </Trigger.EnterActions>
        <Setter Property="Height" Value="85" />
        <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Auto" />
    </Trigger>
</Style.Triggers>