0

我正在尝试在我的列表框中添加一些样式,当创建列表框时,它具有一个项目的大小,当鼠标悬停时,它应该增加它的高度以适应 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"FromTo切换。ListBox 不会移动。

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

我不知道还有什么可以尝试的,因为我对 WPF 的了解不足每次都会妨碍我。

有什么好的选择呢?提前致谢,欢迎随时提出意见。

4

1 回答 1

2

使用额外的Storyboard退货Trigger.ExitActions

<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 属性


或者,您可以设置FillBehavior="Stop"并设置新Height值,如果IsMouseOver为真,就像您为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>
于 2013-07-04T15:03:04.953 回答