【问题标题】:Is canvas load event occurring after other events expected?画布加载事件是否在预期其他事件之后发生?
【发布时间】:2016-01-20 07:20:54
【问题描述】:

在 xaml 中订阅事件时,我不清楚事件的顺序是什么。我不知道为什么,但我的canvas1_SizeChangedevent 首先发生,并导致空引用异常,因为image 尚未初始化,因为Loaded 事件尚未发生。我可能最终只是将canvas1_SizeChanged 事件订阅移动到 Loaded 处理程序,但是,我仍然很好奇为什么时间是这样的。下面是一个代码 sn-p 显示我的问题。

在 xaml 中:

<Canvas Name="canvas1" Loaded="canvas1_Loaded" SizeChanged="canvas1_SizeChanged">

在 xaml.cs 中:

 private Image image;
 private void canvas1_Loaded(object sender, RoutedEventArgs e)
 {
     image = new Image();
 }

 private void canvas1_SizeChanged(object sender, SizeChangedEventArgs e)
 {
      content = image.Content;
 }

【问题讨论】:

    标签: c# wpf events canvas loaded


    【解决方案1】:

    正常的范式是这样的:

    1. 调用控件构造函数。
    2. 设置控件属性(位置、大小、事件处理程序等)
    3. 将控件添加到父控件(如果不是父控件本身)
    4. 显示父级

    在第 2 步,您将收到对 canvas1_SizeChanged 事件处理程序的调用。

    只有在第 4 步之后才会调用 eh canvas_Loaded 事件处理程序

    【讨论】:

    • 所以两个选项是让我的事件处理程序在执行任何逻辑之前检查 IsLoaded。或者订阅 Loaded 事件中的事件。还有其他合理的选择吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-23
    • 2015-06-14
    • 2014-11-28
    • 2020-08-19
    • 1970-01-01
    • 2015-11-13
    • 2013-02-09
    相关资源
    最近更新 更多