我使用自定义的ArrangeOverride函数派生了一个装饰器,该函数负责处理包含ContentPresenter的位置和大小。
如果在第一次渲染页面时元素是可见的,那么每件事都可以正常工作。但是如果装饰元素在那时不可见(例如在ScrollPanel的未显示部分中),则即使然后面板向下滚动并且元素可见,也不会绘制adroner。
protected override Size ArrangeOverride(Size finalSize)
{
Rect adorneredElementRect = GetBounds(AdornedElement);
...
}
在这种情况下,adorneredElementRect为空,我的计算将失败。
饰品通过行为附加到文本框。
public class MyBehavior : Behavior<TextBox> {
...
protected override void OnAttached()
{
myAdorner = new MyAdorner(AssociatedObject);
var layer = AdornerLayer.GetAdornerLayer(VisualHelper.GetTopAdornerLayer(AssociatedObject));
layer.Add(myAdorner);
base.OnAttached();
}
当元素可见时,如何强制调用ArrangeOverride? p>