步骤控制创建过程的WPF(Steps Of Control Creation Process WPF

2019-07-05 04:06发布

我一直在寻找了一段时间这样的交代,我无法找到任何呢。 问题是,我想知道一个WPF控件初始化/创建过程的步骤。

让我们一个简单的按钮,我想知道发生了什么事时,构造函数被调用,当控件添加到的VisualTree / logicalTree,并DependencyProperty的值的调用发生时,当ApplyTemplate在()叫什么名字?

我需要这些信息来能写正确的自定义控件,我认为这会帮助别人过的情况下,他们想知道为什么this.Template.FindName(“测试”)始终返回“空”被称为控制的构造函数中时。

任何人都可以回答这个问题或提供给我其中initizaling控制的概念poperly解释教程的链接?

谢谢 :)

Answer 1:

每本SO这里回答

事件序列被创建并显示一个窗口时

按照要求,这里是WPF重大事件时创建并显示一个窗口的序列:

  1. 构造函数和getter / setter方法被称为创建对象,包括PropertyChangedCallback,ValidationCallback等上正在更新的对象,并从他们继承的任何对象

  2. 由于每个元素被添加到视觉或逻辑树的Intialized事件被激发,这将导致样式和触发器被发现除了你可以定义[注任何特定元素初始化应用:在逻辑树不解雇叶初始化事件如果没有PresentationSource(例如窗口)在其根部]

  3. 窗口并在其上所有的非折叠的视觉效果被测量,这会导致在每个控制,这会导致附加的对象树结构,其包括多个构造和getter / setter方法的ApplyTemplate在

  4. 该窗口上的所有未塌缩的视觉效果被安排

  5. 窗口及其后代(逻辑和视觉)接收加载事件

  6. 当他们失败的第一组的任何数据绑定试

  7. 该窗口及其后代有机会直观地呈现其内容

步骤1-2是在创建窗口时完成的,无论它是否被示出。 至于其他的步骤一般不会发生,直到所示的窗口,但如果手动触发他们可以更早发生。

另外,我个人发现的DispatcherPriority枚举有用确定在某些情况下,事件顺序

  • 无效
  • 待用
  • SystemIdle
  • ApplicationIdle
  • ContextIdle
  • 背景
  • 输入
  • 加载
  • 给予
  • 的DataBind
  • 正常 -构造跑这里来了
  • 发送


文章来源: Steps Of Control Creation Process WPF