Silverlight InitializeComponent是否异步

时间:2013-02-11 15:34:35

标签: silverlight

在我的Silverlight 4页面的构造函数中,我调用了InitializeComponent,紧接着是这句话:

OriginalDefaultCharts = new Dictionary<Chart, string>{ 
    { chartTop, ( ( ComboBoxItem ) comboInstant.SelectedItem ).Tag.ToString ( ) },
    { chartBottom, ( ( ComboBoxItem ) comboCumulative.SelectedItem ).Tag.ToString ( ) } };

这几乎总是有效,但偶尔会出现这样的语句,因为comboCumulative为null。

我看到在InitializeComponent中实例化comboCumulative的地方,但由于这通常有效但并非总是如此,这让我觉得我应该等待一些东西。将InitializeComponent之后的所有构造函数逻辑放入Loaded事件是否典型?

我做到了,但由于我的代码之前很少失败,我不能100%确定我已经解决了这个问题。

1 个答案:

答案 0 :(得分:0)

你做。

是的,对Initialize组件的调用是异步的(更具体地说,UI组件的构建是异步的)。

因此,在初始化组件之后对UI元素执行任何操作是非常糟糕的做法(实际上最好不要在InitializeComponent之后实现合成:让默认构造函数清理并清除)。

好的做法是像你一样在加载的事件中执行这些操作。

但是,请注意,即使在加载的事件中,仍然不会创建一些UI元素(尤其是隐藏的元素)。