在我的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%确定我已经解决了这个问题。
答案 0 :(得分:0)
你做。
是的,对Initialize组件的调用是异步的(更具体地说,UI组件的构建是异步的)。
因此,在初始化组件之后对UI元素执行任何操作是非常糟糕的做法(实际上最好不要在InitializeComponent之后实现合成:让默认构造函数清理并清除)。
好的做法是像你一样在加载的事件中执行这些操作。
但是,请注意,即使在加载的事件中,仍然不会创建一些UI元素(尤其是隐藏的元素)。