我用了个Image控件,放在Canvas里,添加到窗体的grid中
grid.children.add(canvas);
System.Threading.Thread.Sleep(2000);
然后再写个方法 设置Image或者canvas的Opacity=0;然后while循环 +Opacity值 
while(Image.Opacity <1)
{
    Syste.Threading.Thread.Sleep(50);
    Image.Opacity += 0.05;
}
结果是 事件触发后 两秒,直接显示一个Image 中间渐变的过程没了,求解
有人说用storyborad 不知道动态添加控件这个如何使用,求解

解决方案 »

  1.   


            public MainWindow()
            {
                InitializeComponent();
                CompositionTarget.Rendering += new EventHandler(CompositionTarget_Rendering);
            }
            void CompositionTarget_Rendering(object sender, EventArgs e)
            {
                Image.Opacity += 0.05;
            }
      

  2.   

    修正一下        public MainWindow()
            {
                InitializeComponent();
                CompositionTarget.Rendering += new EventHandler(CompositionTarget_Rendering);
            }
            double x = 0;
            void CompositionTarget_Rendering(object sender, EventArgs e)
            {
                x += 0.005;
                button1.Opacity = x;
            }
      

  3.   

    终点是后面那句 
    改变透明度我会结果是 事件触发后 两秒,直接显示一个Image 中间渐变的过程没了,求解
    有人说用storyborad 不知道动态添加控件这个如何使用,求解
    children.add();
    这个方法用上,把控件添加上去,结果就直接显示的是循环完了的渐变的过程没有了
    怎么解决
      

  4.   

    不要用code behind,使用animation,你可以在xaml里设置StoryBoard,去查一下相关知识。
      

  5.   

    http://blogs.msdn.com/b/wpfedevcon/archive/2007/01/05/create-a-reflection-with-wpf_2f00_e.aspx
      

  6.   

    wpf中有两种动画或者渐变方式,一种是按时间间隔,一种是按帧.
    按时间间隔可以使用DispatcherTimer,该计时器可以在UI线程处理;
    按帧则使用CompositionTarget.Rendering事件。
    在循环中使用Sleep,界面在循环时处于“假死”状态,不会看到想要的效果。在XAML中写transform和在cs中写实际是两种不同方式,本质都脱离不了DispatcherTimer或者CompositionTarget.Rendering。