AdornerLayer.Update((和AdornerLayer。Update(UIElement(之间到底有什么区别?
据我所知,每个ui元素只有一个装饰层,这可以通过AdornerLayer.GetAdornerLayer(Visual(获得。我能看到的唯一区别是,如果每个ui元素都没有装饰层。例如,如果我有以下视觉树:
UIElement1
-> UIElement2
-> UIElement3
那么UIElement2
和3
不具有自己的装饰层,而是使用UIElement1
的装饰层。然后Update()
将更新UIElement1
、2
和3
的所有装饰器,而Update(UIElement)
将仅更新相应ui元素的装饰器。
那么,当一个UI元素有自己的装饰器层时,以及当它使用视觉树中更高级别的UI元素的装饰器时,条件是什么呢?
每个UIElement
都会自动拥有自己唯一的AdornerLayer
。看看这个文档:
装饰概述-装饰单个UIElement
GetAdornerLayer从指定的UIElement开始向上遍历可视化树,并返回它找到的第一个装饰层。(如果没有找到装饰层,则该方法返回
null
。(
AdornerDecorator
AdornerDecorator指定AdornerLayer在视觉树。它通常用于控件的ControlTemplate可能承载Adorner对象。例如Window包含一个AdornerDecorator,以便窗户可以装饰一下。如果您传入一个没有AdornerDecorator作为其视觉树中的祖先。
因此,如果您使用Window
作为根元素,则保证在视觉树中至少有一个Adorner
,根据您使用的其他元素,可能会有更多CCD_14。