我有问题是杀了我.以下是简单的例子
<Grid Name="_grid">
    <Button Content="Button" Height="23" HorizontalAlignment="Left" Margin="36,33,0" Name="button" VerticalAlignment="Top" Width="75" />
    <Button Content="Enlarge through animation" Height="23" Margin="172,24,0" Name="_animateButton" VerticalAlignment="Top" Click="_animateButton_Click" />
    <Button Content="Enlarge through simple heigh changing" Height="23"  Margin="172,62,0" Name="_resizeButton" VerticalAlignment="Top" Click="_resizeButton_Click" />
</Grid>

在代码背后

private void _resizeButton_Click(object sender,RoutedEventArgs e)
{
    button.Height += 10;
}

private void _animateButton_Click(object sender,RoutedEventArgs e)
{
    Storyboard storyboard = new Storyboard();

    DoubleAnimation animation = new DoubleAnimation(button.Height + 10,new Duration(new TimeSpan(0,1)));
    storyboard.Children.Add(animation);

    Storyboard.SetTargetName(animation,button.Name);
    Storyboard.SetTargetProperty(animation,new PropertyPath(HeightProperty));

    storyboard.Begin(_grid);
}

应用看起来像这样

按_resizeButton后立即左键放大.然后我按_animateButton – 左键慢慢放大.在此之后,我再次按_resizeButton,没有任何事情发生.这是为什么?

我注意到同样的事情是动画Top属性

解决方法

要了解行为,您需要了解动画在WPF属性系统中的工作原理:通过将属性设置为不同的值,动画不起作用.他们通过为暂时优先于’基础’值的财产提供有效价值来工作.这是一个微妙的区别,但它正是导致你在这里失败的原因.

当第一次遇到动画系统时,大多数人都会想象它通过反复调用属性的“set”访问器来工作.但它没有 – 如果您在开始动画之前设置属性,则您设置的原始值仍然存在.只是getter将返回动画系统提供的值,而不是返回’local’值.实际上,您甚至可以通过在动画运行时设置属性来更改“本地”值,但在动画停止之前,该局部值将不会显示.

实际上,财产系统做了很多这样的事情 – 它不仅仅是动画.这个help topic列出了11个不同的地方,财产的价值可能来自.动画是第二大优先事项.通过’set’访问器(或通过Xaml中的属性)以通常方式设置的属性是次优先级,但是您可以看到模板,样式和触发器都在没有本地属性值时提供其他来源.

WPF中的动画系统具有“基础”值的概念,并且基本上是当前动画值之后可用的次高优先级值.如果您有本地值,那将是基值,但如果您没有基值,则来自该文章中列出的其他来源之一.

所有这一切的结果是,没有一种直接的方式去做你似乎想做的事情.我想你想要的是动画要完成运行,并且属性保留其最终动画值,直到你将本地值设置为其他值为止.

如果在动画完成后告诉动画停止,则有效值将恢复为基值. (正如你在评论中所说,它在动画完成后缩小.)如果你告诉动画一旦完成(这是默认行为),那么动画将永远提供一个优先级高于本地值的值,这就是为什么你看到手动调整按钮大小不再起作用的原因.所以这两种选择都没有你想要的.

有两种方法可以解决这个问题. @responderNS5已发布一个 – 处理完动画,修改局部值以反映动画的最终值,然后停止动画. (你可以认为这是属性的一种降级 – 它将它从高优先级但瞬态动画提供的属性值转换为稍低优先级但更持久的本地值.)我倾向于修改代码有点:

private void myDoubleAnimation_Completed(object sender,EventArgs e)
{
    // Animation complete,but holding,so Height will currently return
    // return the final animated value.
    double finalHeight = button.Height;

    // Remove the animation.
    button.BeginAnimation(Button.HeightProperty,null);

    // Modify the local value to be the same as the final animated value.
    button.Height = finalHeight;
}

我在这里改变的是代码不再试图猜测动画系统结束的位置 – 这只是读取动画系统设置属性的任何值并使其成为新的本地值.我更喜欢在Completed处理程序中的= 10,这对我来说感觉就像是一个稍微脆弱的逻辑重复.

处理它的另一种方法是在尝试更新属性时删除动画:

private void _resizeButton_Click(object sender,RoutedEventArgs e)
{
    double currentHeight = button.Height;
    button.BeginAnimation(Button.HeightProperty,null);
    button.Height = currentHeight + 10;
}

private void _animateButton_Click(object sender,RoutedEventArgs e)
{
    DoubleAnimation animation = new DoubleAnimation
    {
        By = 10,Duration = new Duration(TimeSpan.FromSeconds(1))
    };
    button.BeginAnimation(Button.HeightProperty,animation);
}

这对我来说似乎稍微强一些,因为即使动画在单击调整大小按钮时尚未完成,这也会起作用.

c# – 为什么在设置动画高度设置后,此属性将直接停止工作的更多相关文章

  1. Canvas实现贝赛尔曲线轨迹动画的示例代码

    这篇文章主要介绍了Canvas实现贝赛尔曲线轨迹动画的示例代码的相关资料,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  2. HTML5 input新增type属性color颜色拾取器的实例代码

    type 属性规定 input 元素的类型。本文较详细的给大家介绍了HTML5 input新增type属性color颜色拾取器的实例代码,感兴趣的朋友跟随脚本之家小编一起看看吧

  3. amazeui模态框弹出后立马消失并刷新页面

    这篇文章主要介绍了amazeui模态框弹出后立马消失并刷新页面,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  4. 移动HTML5前端框架—MUI的使用

    这篇文章主要介绍了移动HTML5前端框架—MUI的使用的相关资料,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  5. HTML5 直播疯狂点赞动画实现代码 附源码

    为了烘托直播间的氛围,直播相对于普通视频或者文本内容,点赞动作通常无限次,引导用户疯狂点赞,今天小编给大家分享HTML5 直播疯狂点赞动画实现代码 附源码,感兴趣的朋友一起看看吧

  6. CSS中实现动画效果-附案例

    这篇文章主要介绍了 CSS中实现动画效果并附上案例代码及实现效果,就是CSS动画样式处理,动画声明需要使用@keyframes name,后面的name是人为定义的动画名称,下面我们来看看文章的具体实现内容吧,需要的小伙伴可以参考一下

  7. 基于canvas的骨骼动画的示例代码

    这篇文章主要介绍了基于canvas的骨骼动画的示例代码的相关资料,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  8. html5如何在Canvas中实现自定义路径动画示例

    本篇文章主要介绍了html5如何在Canvas中实现自定义路径动画示例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  9. 基于HTML5+Webkit实现树叶飘落动画

    本文给大家分享一段实例代码给大家介绍基于HTML5+Webkit实现树叶飘落动画效果,需要的朋友参考下吧

  10. Html5页面内使用JSON动画的实现

    这篇文章主要介绍了Html5页面内使用JSON动画的实现的相关资料,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

随机推荐

  1. c# – (wpf)Application.Current.Resources vs FindResource

    所以,我正在使用C#中的WPF创建一个GUI.它看起来像这样:它现在还没有完成.这两行是我尝试制作一种数据表,它们在XAML中是硬编码的.现在,我正在C#中实现添加新的水果按钮功能.我在XAML中有以下样式来控制行的背景图像应该是什么样子:因此,在代码中,我为每列col0,col1和col2创建一个图像,如果我使用以下代码,它添加了一个如下所示的新行:如你所见,它不太正确……为什么一个似乎忽略了一些属性而另一个没有?

  2. c# – 绑定DataGridTemplateColumn

    似乎我已经打了个墙,试图在DataGrid上使用DataTemplates.我想要做的是使用一个模板来显示每个单元格的两行文本.但是似乎无法以任何方式绑定列.以下代码希望显示我想做的事情.注意每个列的绑定:模板列没有这样的东西,因此,这个xaml不可能工作.我注定要将整个DataTemplate复制到每个列,只是对每个副本都有不同的约束?解决方法我不完全确定你想要做什么,但如果您需要获取整行的DataContext,可以使用RelativeSource绑定来移动视觉树.像这样:

  3. c# – 学习设计模式的资源

    最近我来到了这个设计模式的概念,并对此感到非常热情.你能建议一些帮助我深入设计模式的资源吗?

  4. c# – 是否有支持嵌入HTML页面的跨操作系统GUI框架?

    我想开发一个桌面应用程序来使用跨系统,是否有一个GUI框架,允许我为所有3个平台编写一次代码,并具有完全可脚本化的嵌入式Web组件?我需要它有一个API来在应用程序和网页之间进行交流.我知道C#,JavaScript和一些python.解决方法Qt有这样的事情QWebView.

  5. c# – 通过字符串在对象图中查找属性

    我试图使用任意字符串访问嵌套类结构的各个部分.给出以下(设计的)类:我想要从Person对象的一个实例的“PersonsAddress.HousePhone.Number”获取对象.目前我正在使用反思来做一些简单的递归查找,但是我希望有一些忍者有更好的想法.作为参考,这里是我开发的(crappy)方法:解决方法您可以简单地使用标准的.NETDataBinder.EvalMethod,像这样:

  6. c# – 文件下载后更新页面

    FamilyID=0a391abd-25c1-4fc0-919f-b21f31ab88b7&displaylang=en&pf=true它呈现该页面,然后使用以下元刷新标签来实际向用户提供要下载的文件:你可能需要在你的应用程序中做类似的事情.但是,如果您真的有兴趣在文件完全下载后执行某些操作,那么您的运气不佳,因为没有任何事件可以与浏览器进行通信.执行此操作的唯一方法是上传附件时使用的AJAXupload.

  7. c# – 如何在每个机器应用程序中实现单个实例?

    我必须限制我的.net4WPF应用程序,以便每台机器只能运行一次.请注意,我说每个机器,而不是每个会话.我使用一个简单的互斥体实现单实例应用程序,直到现在,但不幸的是,这样一个互斥是每个会话.有没有办法创建机器互连,还是有其他解决方案来实现每个机器应用程序的单个实例?

  8. c# – WCF和多个主机头

    我的雇主网站有多个主机名,都是同一个服务器,我们只是显示不同的皮肤来进行品牌宣传.不幸的是,在这种情况下,WCF似乎不能很好地工作.我试过overridingthedefaulthostwithacustomhostfactory.这不是一个可以接受的解决方案,因为它需要从所有主机工作,而不仅仅是1.我也看过thisblogpost,但是我无法让它工作,或者不是为了解决我的问题.我得到的错误是“这

  9. c# – ASP.NET MVC模型绑定与表单元素名称中的虚线

    我一直在搜索互联网,试图找到一种方式来容纳我的表单元素的破折号到ASP.NET的控制器在MVC2,3或甚至4中的默认模型绑定行为.作为一名前端开发人员,我更喜欢在我的CSS中使用camelCase或下划线进行破折号.在我的标记中,我想要做的是这样的:在控制器中,我会传入一个C#对象,看起来像这样:有没有办法通过一些正则表达式或其他行为来扩展Controller类来适应这种情况?我讨厌这样的事实,我必须这样做:甚至这个:思考?

  10. c# – 用户界面设计工具

    我正在寻找一个用户界面设计工具来显示文档中可能的GUI.我不能生成代码.我知道MicrosoftVisio提供了一个功能.但有什么办法吗?您使用哪种软件可视化GUI?

返回
顶部