Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 单击栅格时更改鼠标移动动画_Wpf_Xaml_Animation - Fatal编程技术网

Wpf 单击栅格时更改鼠标移动动画

Wpf 单击栅格时更改鼠标移动动画,wpf,xaml,animation,Wpf,Xaml,Animation,在我的WPF应用程序中,在可见空间的底部有一个部分可见的网格。当你将鼠标滑过它时,它会向上滑动,网格中的所有内容都是可见的。当鼠标离开网格时,它会向下滑动。网格中有包含信息的组合框和文本框,用户可以对其进行更新 我如何使它,如果我点击网格中的任何地方,MouseLeave动画不再熄灭(即使你的鼠标离开,网格也会保持不动) 我已经用两种不同的方式实现了我的动画,试图让它按照我想要的方式运行,但到目前为止运气不佳 实施1: `<Grid x:Name="PopupAnimation" Hori

在我的WPF应用程序中,在可见空间的底部有一个部分可见的网格。当你将鼠标滑过它时,它会向上滑动,网格中的所有内容都是可见的。当鼠标离开网格时,它会向下滑动。网格中有包含信息的组合框和文本框,用户可以对其进行更新

我如何使它,如果我点击网格中的任何地方,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>

这两条路走对了吗?如何禁用(和启用)动画

我如何使它,如果我点击网格中的任何地方,MouseLeave动画不再熄灭(即使你的鼠标离开,网格也会保持不动)

不要按样式执行上下移动,而是订阅所有相关事件,并使用
mouse-enter
mouse-leave
事件以代码隐藏方式运行故事板

然后在最后一个事件中,在代码隐藏网格单击事件中,设置一个布尔标志,该标志将由
鼠标离开
事件读取,并允许其不执行故事板


下面是代码,我必须在codebehind中移入/移出一个窗口,让您了解故事板:

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);
   }
}

如果网格中没有任何内容在显示后可供用户操作。您可以做的一件快速的事情是,只需单击网格的事件,只需对父网格上显示的IshittesVisible属性执行布尔切换,这样,如果单击,它将忽略任何鼠标事件,IshittesVisible=“false”将使任何IsMouseOver触发器及其操作无效。@ChrisW。不幸的是,网格中有用户可操作的部分(组合框等等)。我希望能让用户更容易地快速查看信息(鼠标悬停)和编辑信息(点击后,直到按钮显示“向下”为止)。现在我将把它编辑成问题。这为我指明了正确的方向,我让它运行起来了。不过我很好奇,这是如何融入MVVM范式的?@Pants MVVM是“三层设计”的一个别致的名字,视图与业务分离,数据层分离。MVVM的教条让人认为一切都必须在XAML中完成。这显然是错误的。只要在虚拟机上保留业务逻辑,并在XAML或代码中保留视图逻辑,即MVVM。只要记住,XAML是经过解析的,转化为代码隐藏和链接的;因此,人们可以在XAML中做什么,也可以在代码隐藏中做什么。当最终将其集成到代码中时,是否必须跳转到XAML中才能实现所有功能?:-)不,那只是我的观点,我可能错了。很有趣。我正在开发我的第一个完整堆栈应用程序,在谈到WPF时,我一直看到MVVM被抛出。你的看法对我很有意义。不管是谁,谢谢你的帮助!