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