WPF动画之后属性值无法改变
? ? ? ? 前一段時(shí)間使用WPF寫2048游戲的時(shí)候,遇到下面的情形:使用按鍵對(duì)色塊進(jìn)行移動(dòng)時(shí),觸發(fā)位置左邊X和Y屬性的DoubleAnimation動(dòng)畫,但是如果此時(shí)改變窗口的大小,并觸發(fā)Canvas.SetLeft重新設(shè)置色塊的位置時(shí),發(fā)現(xiàn)色塊沒有更新到正確的位置上。
? ? ? ??通過調(diào)試發(fā)現(xiàn),Canvas.SetLeft調(diào)用前后X和Y的數(shù)值并沒有發(fā)生變化。
? ? ? ??最終在微軟官網(wǎng)找到原因
? ? ? ??http://msdn.microsoft.com/zh-cn/library/aa970493(v=VS.100).aspx
? ? ? ??官方解釋,某些情況下,對(duì)屬性進(jìn)行動(dòng)畫處理之后,無(wú)法修改該屬性的值。
? ? ? ??也就是說(shuō),動(dòng)畫對(duì)數(shù)值進(jìn)行了加鎖,在解鎖之前,其他代碼無(wú)法對(duì)其進(jìn)行修改。
? ? ? ??官網(wǎng)提供三種解決方法:
? ? ? ?1、?將動(dòng)畫的?FillBehavior?屬性設(shè)置為?Stop
? ? ? ??2、移除整個(gè)演示圖板。
? ? ? ? 3、?從單個(gè)屬性移除動(dòng)畫。
? ? ? ??第一種方式在動(dòng)畫結(jié)束之后,數(shù)值會(huì)恢復(fù)之前的值,所以最終需要重新設(shè)定該值。
? ? ? ??第二種方式通過使用?RemoveStoryboard?或?Storyboard.Remove移除Storyboard,直接消除其影響。
? ? ? ??第三種使用正在進(jìn)行動(dòng)畫處理的對(duì)象的?BeginAnimation(DependencyProperty,?AnimationTimeline)?方法。?將正進(jìn)行動(dòng)畫處理的屬性指定為第一個(gè)參數(shù),將?null?指定為第二個(gè)參數(shù)。
? ? ? ??上面三種方法親測(cè)可用。
?
?
posted on 2019-05-01 10:16 NET未來(lái)之路 閱讀(...) 評(píng)論(...) 編輯 收藏轉(zhuǎn)載于:https://www.cnblogs.com/lonelyxmas/p/10799261.html
總結(jié)
以上是生活随笔為你收集整理的WPF动画之后属性值无法改变的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JMeter性能测试的基础知识和个人理解
- 下一篇: WPF入门教程(七)---依赖属性(3)