在加载之后和显示用户控件之前是否有任何事件?

时间:2012-03-13 07:21:45

标签: wpf user-controls onload

我正在我们的应用程序中的特定网格中加载用户控件,并且我正在向控件的Loaded事件处理程序中的加载用户控件添加动画。

某些用户控件是轻量级的,其中一些在加载前需要大量计算。问题是,当我向重度用户控件添加1秒动画时,然后显示控件,以便永远不会看到动画!

是否有任何其他事件可以将我的动画添加到用户控件中,以便使用相同的动画显示重的动画和轻动画?

在显示控件之前我需要一个事件。不幸的是,OnLoaded似乎不适合我。

3 个答案:

答案 0 :(得分:5)

答案是给Storyboard.Begin一个较低的优先级。

我从这个答案中找到了它:https://stackoverflow.com/a/4708172/970420

所以我们有这个代码来开始动画:

    void BeginStoryboardAction(Storyboard sb)
    {
        sb.Begin();
    }

我们应该这样称呼它:

    Dispatcher.BeginInvoke(new Action<Storyboard>(BeginStoryboardAction), DispatcherPriority.ContextIdle, sb);

sb 是Storyboard的一个实例,其中包含一些动画。

[编辑]: 另一种较短的方式:

Dispatcher.BeginInvoke(new Action<Storyboard>(delegate (Storyboard stb){stb.Begin();}), DispatcherPriority.ContextIdle, sb);

答案 1 :(得分:3)

首次打开窗口时,仅在引发Activated事件后才会引发Loaded和ContentRendered事件。考虑到这一点,在引发ContentRendered时可以有效地考虑打开窗口。

http://msdn.microsoft.com/en-us/library/ms748948.aspx

答案 2 :(得分:0)

对于那些正在寻找通用方法来在创建组件之后但在呈现它们之前执行代码的人LayoutUpdated事件有帮助。这应该在Windows内部以及用户或自定义控件内部工作。