单击网格时更改MouseLeave动画

时间:2017-02-09 20:07:02

标签: wpf xaml animation

在我的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>

这些中的任何一个都是正确的道路吗?如何禁用(和启用)动画?

1 个答案:

答案 0 :(得分:1)

  

如何点击网格中的任何位置,MouseLeave动画不再熄灭(如果鼠标离开,网格会保持不变)?

不要按风格执行上下移动,而是订阅相关的所有事件,并使用mouse entermouse 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);
   }
}