执行动画后再设置Canvas.Left值不起作用

为轮子而生 2016-04-15 05:25:59
一个很奇怪的问题,不知道大家遇到过没有:
1、在Canvas中直接设置元素位置,是有效果的,比如 Canvas.SetLeft(box, 50);
2、使用一个StoryBoard或直接BeginAnimation动画改变位置,也是有效果的 (见test1_Click)
3、在使用动画改变元素位置后,再使用Canvas.SetLeft,纹丝不动!!?

XAML代码:

<Canvas>
<Border x:Name="box" Width="100" Height="100" Background="Blue" Canvas.Left="150" Canvas.Top="90"/>
<Button x:Name="test1" Content="test1" Height="27" Canvas.Left="441" Canvas.Top="17" Width="57" Click="test1_Click"/>
<Button x:Name="test2" Content="test2" Height="27" Canvas.Left="441" Canvas.Top="57" Width="57" Click="test2_Click"/>
</Canvas>



后台代码:

private void test1_Click(object sender, RoutedEventArgs e)
{

//((Storyboard)this.Resources["move"]).Begin();

KeyTime time_layout = KeyTime.FromTimeSpan(TimeSpan.FromMilliseconds(200));

Storyboard sb = new Storyboard();

DoubleAnimationUsingKeyFrames da = new DoubleAnimationUsingKeyFrames();
sb.Children.Add(da);
Storyboard.SetTarget(da, box);
Storyboard.SetTargetProperty(da, new PropertyPath("(Canvas.Left)"));

EasingDoubleKeyFrame kf_left = new EasingDoubleKeyFrame { KeyTime = time_layout, Value = 200 };
da.KeyFrames.Add(kf_left);

sb.Begin();

}

private void test2_Click(object sender, RoutedEventArgs e)
{
Canvas.SetLeft(box, 50);
}
...全文
652 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
为轮子而生 2016-04-17
  • 打赏
  • 举报
回复
引用 4楼muzizongheng 的回复:
虽然已经解决, 但我得补充下, 供参考。 这个原因是优先级, 动画的优先级比本地高。具体你可以看资料了解, 或者用snoop看这个依赖属性,上面会标出值的来源。 从上面的原理上我猜是动画没有真正结束,不过没仔细看你的动画代码,仅供参考。
snoop检测不到我的wpf程序,很奇怪
muzizongheng 2016-04-17
  • 打赏
  • 举报
回复
引用 5 楼 rocmemory 的回复:
[quote=引用 4楼muzizongheng 的回复:]虽然已经解决, 但我得补充下, 供参考。 这个原因是优先级, 动画的优先级比本地高。具体你可以看资料了解, 或者用snoop看这个依赖属性,上面会标出值的来源。 从上面的原理上我猜是动画没有真正结束,不过没仔细看你的动画代码,仅供参考。
snoop检测不到我的wpf程序,很奇怪[/quote] 用管理员权限启动snoop。
muzizongheng 2016-04-16
  • 打赏
  • 举报
回复
虽然已经解决, 但我得补充下, 供参考。 这个原因是优先级, 动画的优先级比本地高。具体你可以看资料了解, 或者用snoop看这个依赖属性,上面会标出值的来源。 从上面的原理上我猜是动画没有真正结束,不过没仔细看你的动画代码,仅供参考。
为轮子而生 2016-04-16
  • 打赏
  • 举报
回复
问题已在C#区解决 http://bbs.csdn.net/topics/391935700
为轮子而生 2016-04-16
  • 打赏
  • 举报
回复
引用 1 楼 guonan198811 的回复:
应该是的你的Canvas没有获得焦点,另外,操作之后还需要刷新界面
没有听说过WPF的元素还要有焦点才能设置位置的,还有你说的刷新界面是什么? UpdateLayout吗? 怎么越听越觉得你说的是WinForm...
南天空 2016-04-15
  • 打赏
  • 举报
回复
应该是的你的Canvas没有获得焦点,另外,操作之后还需要刷新界面

8,755

社区成员

发帖
与我相关
我的任务
社区描述
WPF/Silverlight相关讨论
社区管理员
  • WPF/Silverlight社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧