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

问题描述

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

一个很奇怪的问题,不知道大家遇到过没有:
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);
}

解决方案

已在c#技术区得到解决

解决方案二:

http://bbs.csdn.net/topics/391935527

时间: 2024-08-04 03:54:04

c#-执行动画后再设置Canvas.Left值不起作用的相关文章

ios开发-iOS开发中,如和使等待block执行完毕后再执行下面的代码?

问题描述 iOS开发中,如和使等待block执行完毕后再执行下面的代码? int a = 0; void (^requestBlock)(NSDictionary *) = ^(int data){ a = data;//这里假设data = 1,那么a也要 = 1 }: NSLog(a); 这里的a永远是0,在有这段block的前提下,有什么办法让程序同步执行,也就是等待block执行完之后再执行下面的代码?这里只是的例子,我确实有这方面的需要. 解决方案 自己用信号量来同步 block后面w

WebBrowser让DocumentCompleted事件执行完毕后再往下执行

Q:WebBrowser如何让DocumentCompleted事件执行完毕后再往下执行? A:使用信号量,等待一下 System.Threading.AutoResetEvent obj = new System.Threading.AutoResetEvent(false); void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) ...{ obj.Set(); } p

cmd-用C#调用CMD时,实现同步输出结果,而不是等命令执行完了后再输出。

问题描述 用C#调用CMD时,实现同步输出结果,而不是等命令执行完了后再输出. 用C#调用CMD时,如何实现同步输出结果,而不是等命令执行完了后再输出. 解决方案 JAVA中调用CMD命令,并输出执行结果 解决方案二: 用管道跟命令通信,获取它的输出.

java并发编程学习:如何等待多个线程执行完成后再继续后续处理(synchronized、join、FutureTask、CyclicBarrier)

多线程应用中,经常会遇到这种场景:后面的处理,依赖前面的N个线程的处理结果,必须等前面的线程执行完毕后,后面的代码才允许执行. 在我不知道CyclicBarrier之前,最容易想到的就是放置一个公用的static变量,假如有10个线程,每个线程处理完上去累加下结果,然后后面用一个死循环(或类似线程阻塞的方法),去数这个结果,达到10个,说明大家都爽完了,可以进行后续的事情了,这个想法虽然土鳖,但是基本上跟语言无关,几乎所有主流编程语言都支持. package yjmyzz.test; publi

探讨在JQuery和Js中,如何让ajax执行完后再继续往下执行

查了不少资料,最后,还是jquery指南的书上找到了详细的参数(async: false,),做好后,示例代码放上,如下所示,需要的朋友可以参考下   复制代码 代码如下:   $.ajax        ({             cache: false,             async: false,   // 太关键了,学习了,同步和异步的参数             dataType: 'json', type: 'post',             url: "../hand

pagetransformer-ViewPager使用PageTransformer设置了切换动画后,内部的view不刷新

问题描述 ViewPager使用PageTransformer设置了切换动画后,内部的view不刷新 5.0的系统会出现以下问题,4.4的系统则没问题 我使用了如下代码实现了ViewPager的动画切换效果 viewPager.setPageTransformer(true, new DepthPageTransformer()); 使用FragmentStatePagerAdapter将fragment作为ViewPager的子页面. 但是fragment中的checkBox或RadioBut

file标签弹出文件选择框后再执行后面的

问题描述 file标签弹出文件选择框后再执行后面的 $('#a').click(function(){ $('#b').click(); alert("b"); }) <input type="button" id="a"> <input type="file" id="b"> 我想 点击a按钮弹出文件选择框,选择了文件之后再执行alert(). 怎么弄 解决方案 设置b透明,然后b

页面加载完成后再执行JS的jquery写法以及区别说明

 本篇文章主要是对页面加载完成后再执行JS的jquery写法以及区别进行了介绍,需要的朋友可以过来参考下,希望对大家有所帮助 1.$(function(){  $("#a").click(function(){  //adding your code here  });  });  2.$(document).ready(function(){  $("#a").click(function(){  //adding your code here   });  })

如何在调用CAD,并在CAD中调用lisp时不弹出CAD界面?全部执行后再显示?

问题描述 如何在调用CAD,并在CAD中调用lisp时不弹出CAD界面?全部执行后再显示?我是这样做的AutoCAD.AcadApplicationClasscadApp=newAutoCAD.AcadApplicationClass(); //2004.2005Application.DoEvents();//cadApp.Documents.Application.Visible=true;//CAD成图cadApp.Documents.Open(sFileName,falseasobjec