在WPF中,有一个事件VisualDiagnostics.VisualTreeChanged,每次将新元素添加到可视树(任何地方)时都会触发该事件。问题是这只有在调试器附加到进程时才有效。有没有办法解决这个限制?没有调试器的任何其他类似事件?我可以伪造一个附加的调试器吗?
我的目标是获取窗口中某些类型(Button,TextBox,ComboBox等)的所有元素的列表,包括从模板生成的那些元素。我需要这个在运行时设置某些自动化属性。
一种可能性是使用Window.LayoutUpdated事件,但这种情况经常发生,并且大部分时间都没有添加任何新元素。我将不得不在每个布局更新中遍历整个可视树以查找新元素,我认为这不会非常有效。我当然更喜欢更直接的方法。
但VisualDiagnostics.VisualTreeChanged事件并不理想,因为event-args中的元素尚未包含任何子元素。例如,一个按钮甚至没有它自己的文本内容。如果有第三个选项,我可以抓住所有新元素的整个元素片段,因为它们的添加效果会非常好。
(已尝试覆盖OnVisualChildrenChanged,但这不会捕获新的后代元素,只看起来是儿童)