2010-12-21 33 views
0

天儿真好,调整大小网格控件编程一段时间

我试图模仿旧的Xbox 360图形用户界面与滑动片(请记住,你会向左或向右按​​压和内容将下滑在不同的标签?)无论如何,目前,我有这个工作很好,但我不能让“动画”的工作。

当用户按下左箭头或右箭头时,我的OpenWindow(int iIndex)方法将被调用,其中iIndex是要插入的下一个或上一个“窗口”的索引。(不是窗口...每个“窗口”是一个结构与父网格控件包含一个按钮和一个较小的网格控件,其中包含窗口内容)。当它滑入时,它通过调用mygrid.Width + = 1来调整大小;这是有效的,但我没有看到它发生在一段确定的时间内,它只是滞后一点,然后调整到所需的宽度。而如果我在同一个方法中调用this.Width + = 1(这是主程序窗口),窗口调整了我希望网格控件调整大小的方式。我试过UpdateLayout()但无济于事。这告诉我我的时间没问题。

如果有人可以提供帮助,将不胜感激。

这里是我的了OpenWindow方法...

public void OpenWindow(int iIndex) 
    { 
     int iInterval = 1; 
     for (int i = (int)myDict[iIndex].Shell.Width; i < (int)stack_outter.Width; i += iInterval) 
     {     
      myDict[iIndex].Shell.Width += 1; 
      myDict[iIndex].Shell.UpdateLayout(); 
      System.Threading.Thread.Sleep(1);     

     } 

     myDict[iIndex].Shell.Width = stack_outter.Width - (BUTTON_WIDTH * (myDict.Count - 1)); 
    } 

myDict是一本字典,壳牌是我试图调整时的动画网格。很抱歉的代码,它的混乱,我的代码总是砍死当我试图得到的东西的工作:)

感谢,

Neried Web Solutions

回答

0

你了OpenWindow方法上发生的事情调度程序线程。这也是负责渲染的线程,所以只要你的OpenWindow方法没有返回,什么都不会渲染。

解决此问题的正确方法是动画宽度属性。我没有任何从代码启动动画的经验(我以前只使用过它们,例如鼠标悬停时的淡入按钮突出显示,这很容易从WPF完成),但是我快速阅读通过这页,Animation Overview on MSDN,我想你会想要这样的事情:

 DoubleAnimation myDoubleAnimation = new DoubleAnimation(); 
     myDoubleAnimation.From = myDict[iIndex].Shell.Width; 
     myDoubleAnimation.To = stack_outter.Width; 
     myDoubleAnimation.Duration = new Duration(TimeSpan.FromSeconds(0.5)); 
     myDoubleAnimation.AutoReverse = false; 
     myDoubleAnimation.RepeatBehavior = new RepeatBehavior(1.0); 

     myStoryboard = new Storyboard(); 
     myStoryboard.Children.Add(myDoubleAnimation); 
     Storyboard.SetTarget(myDoubleAnimation, myDict[iIndex].Shell); 
     Storyboard.SetTargetProperty(myDoubleAnimation, new PropertyPath(FrameworkElement.WidthProperty)); 
     myStoryboard.Begin(myDict[iIndex].Shell); 
+0

谢谢。我并不知道应用程序运行的不同线程。一些东西读入我猜:)干杯。 – 2010-12-21 09:26:34