AdornerLayer.Update 方法之间的区别
Difference between the AdornerLayer.Update methods
AdornerLayer.Update() and 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
。看看这个文档:
Adorners Overview - Adorning a Single UIElement
GetAdornerLayer walks up the visual tree, starting at the specified UIElement, and returns the first adorner layer it finds. (If no adorner layers are found, the method returns null
.)
The AdornerDecorator specifies the position of the AdornerLayer in the
visual tree. It is typically used in a ControlTemplate for a control
that might host Adorner objects. For example, the ControlTemplate of a
Window contains an AdornerDecorator so that the child elements of the
window can be adorned. The GetAdornerLayer method returns null
if you
pass in an element that does not have an AdornerDecorator as an
ancestor in its visual tree.
因此,如果您使用 Window
作为根元素,则保证在可视化树中至少有一个 Adorner
,根据您使用的其他元素,可能会有更多.
AdornerLayer.Update() and 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
。看看这个文档:
Adorners Overview - Adorning a Single UIElement
GetAdornerLayer walks up the visual tree, starting at the specified UIElement, and returns the first adorner layer it finds. (If no adorner layers are found, the method returns
null
.)
The AdornerDecorator specifies the position of the AdornerLayer in the visual tree. It is typically used in a ControlTemplate for a control that might host Adorner objects. For example, the ControlTemplate of a Window contains an AdornerDecorator so that the child elements of the window can be adorned. The GetAdornerLayer method returns
null
if you pass in an element that does not have an AdornerDecorator as an ancestor in its visual tree.
因此,如果您使用 Window
作为根元素,则保证在可视化树中至少有一个 Adorner
,根据您使用的其他元素,可能会有更多.