在我的WPF应用程序中,我在可见空间的底部有一个部分可见的网格。鼠标悬停时,它会向上滑动,网格中的所有内容都可见。当鼠标离开网格时,它会向下滑动。网格中有Combo和TextBox,它们将包含信息并且能够由用户更新。
如何点击网格中的任何位置,MouseLeave动画不再熄灭(如果鼠标离开,网格会保持不变)?
我已经以不同的方式实现了我的动画,试图让它按照我想要的方式运行,但到目前为止还没有运气。
实施1:
`<Grid x:Name="PopupAnimation" HorizontalAlignment="Stretch" VerticalAlignment="Bottom" Height="30">
<Grid.Triggers>
<EventTrigger RoutedEvent="MouseEnter">
<BeginStoryboard Name="MouseOn">
<Storyboard>
<DoubleAnimation Storyboard.TargetProperty="Height" From="30" To="90" Duration="0:0:.15"/>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
<EventTrigger RoutedEvent="MouseLeave">
<BeginStoryboard Name="MouseOff">
<Storyboard>
<DoubleAnimation Storyboard.TargetProperty="Height" From="90" To="30" Duration="0:0:0.15"/>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
<EventTrigger RoutedEvent="MouseLeftButtonDown">
<StopStoryboard BeginStoryboardName="MouseOff" />
</EventTrigger>
</Grid.Triggers>
`
实施2:
<Grid>
<Grid.Style>
<Style TargetType="Grid">
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Trigger.EnterActions>
<BeginStoryboard Name="MouseOn">
<Storyboard>
<DoubleAnimation Storyboard.TargetProperty="Height" From="30" To="90" Duration="0:0:.15"/>
</Storyboard>
</BeginStoryboard>
</Trigger.EnterActions>
<Trigger.ExitActions>
<BeginStoryboard Name="MouseOff">
<Storyboard>
<DoubleAnimation Storyboard.TargetProperty="Height" From="90" To="30" Duration="0:0:0.15"/>
</Storyboard>
</BeginStoryboard>
</Trigger.ExitActions>
</Trigger>
</Style.Triggers>
</Style>
</Grid.Style>
</Grid>
这些中的任何一个都是正确的道路吗?如何禁用(和启用)动画?
答案 0 :(得分:1)
如何点击网格中的任何位置,MouseLeave动画不再熄灭(如果鼠标离开,网格会保持不变)?
不要按风格执行上下移动,而是订阅相关的所有事件,并使用mouse enter
和mouse leave
的事件在代码隐藏中运行故事板。
然后在最后的事件中,在网格点击事件后面的代码中,设置一个布尔标志,该标志将由mouse leave
事件读取,并允许它不执行故事板。
以下是我必须在代码隐藏中移动/移出窗口的代码,以便让您了解故事板:
if (moveRight)
{
(Resources["MoveToOpen"] as Storyboard)?.Begin(this, false);
(Resources["FlipArrowClose"] as Storyboard)?.Begin(this, false);
}
else
{
if (closeWindow == false)
{
(Resources["MoveToClose"] as Storyboard)?.Begin(this, false);
(Resources["FlipArrowOpen"] as Storyboard)?.Begin(this, false);
}
}