【发布时间】:2013-11-10 03:23:02
【问题描述】:
我订阅了 wpf 窗口的 Loaded 事件:Loaded += loaded; 并尝试在后面的代码中更改某些控件的不透明度。
我注意到在loaded 方法中,wpf 尚未绘制控件。所以代码没有效果,控件的渲染只有在方法退出后才会发生。
1) 是否还有其他事件,例如? Rendered 可以订阅吗?
编辑:我刚刚发现有一个 OnContentRendered 事件并且以下代码有效:
虽然动画可能更可取。
protected override void OnContentRendered(EventArgs e)
{
base.OnContentRendered(e);
for (int i = 0; i < 100; i++)
{
Parentpanel.Opacity += 0.01;
Splashscreen.Opacity -= 0.01;
Dispatcher.Invoke(new Action(() => { }), DispatcherPriority.ContextIdle, null);
Thread.Sleep(50);
}
}
否则我可能不得不使用将 usercontrol1 的不透明度从 0.1 更改为 1.0 并将 usercontrol2 从 1.0 更改为 0.0 的动画。
2) 你知道这样一个动画的例子吗?
【问题讨论】:
-
您的控件在哪里定义?例如,如果它们在
ControlTemplate中定义,那么在引发Loaded事件时它们可能还没有准备好。在这种情况下,您需要处理FrameworkElement.OnApplyTemplateMethod。
标签: wpf animation opacity loaded