我正试图在我的列表框中添加一些样式,当创建列表框时,它有一个项目的大小,当鼠标悬停时,它应该增加高度以容纳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方面的知识匮乏每次都会妨碍我。
有什么好的替代方案?提前感谢,欢迎发表意见。
在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>