【问题标题】:Redrawing to a silverlight canvas every cycle of a loop. Is it possible?在循环的每个循环中重绘到 Silverlight 画布。是否可以?
【发布时间】:2011-06-17 12:53:05
【问题描述】:

任何帮助或指点将不胜感激。

基本上,我试图在“转弯”时移动或重绘一些椭圆到画布上。

目前我可以单击一个按钮将椭圆渲染到画布中的新位置。每当我尝试多次执行此操作时,例如,每次循环将 TranslateTransform X 和 Y 值增加一个,整个应用程序就会挂起。这是 RenderTransform 的问题吗?帆布? MainPage 线程?代码看起来很可靠,所以它为什么不能多次移动椭圆是一个谜。

private void update()
    {
        int x = 0;
        int y = 0;
        while (turns <= 5)
        {
            TranslateTransform t = new TranslateTransform();
            t.X = x + 1;
            t.Y = y + 1;
            // agent is a child element of a canvas.
            agent.RenderTransform = t;
            turns--;
        }
    }

【问题讨论】:

  • 当我们看到相关的源代码时更容易发现问题。
  • 你说得对,更新方法如下。
  • 为什么不使用动画?
  • 椭圆本质上是根据碰撞规则和寻路行动的代理,这对故事板不起作用,我只需要经常更新它们的位置。
  • 不要低估简单“移动”任务的情节提要。您可以命名情节提要中的任何元素,以便以编程方式访问目标位置。这样,实际的可变帧速率动画将留给 Silverlight 引擎,而不是您。

标签: c# silverlight canvas draw


【解决方案1】:

你可以使用CompositionTarget它会帮助你
this example
another good example

像这样使用它:

private void Update(object sender, EventArgs e)
{
     //Your code here
}

并钩住渲染事件CompositionTarget.Rendering += Update;

编辑:如果您使用的是 Canvas,最好使用 Canvas.Left 和 Canvas.Top 附加属性

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-21
    • 2021-08-27
    • 1970-01-01
    • 1970-01-01
    • 2018-08-31
    • 1970-01-01
    • 1970-01-01
    • 2018-05-15
    相关资源
    最近更新 更多