我需要确定画布中包含的子项的绘制顺序。所以我遇到了这个问答:
如何比较属于同一逻辑/视觉树的两个 WPF 控件的相对 Z 顺序?
这在大多数情况下都能正常工作,但有时我会从这段代码中得到一个错误:
private Panel FindWindowRoot(FrameworkElement child)
{
FrameworkElement current = child;
while(current as Window == null)
{
current = (FrameworkElement)VisualTreeHelper.GetParent(current);
}
return ((Window)current).Content as Panel;
}
该调用VisualTreeHelper.GetParent(current)
最终引发异常“值不能为空”。
这是我如何使用DrawOrderComparer
.
ucVertexControl Control = new ucVertexControl(vertex);
cnvDrawingArea.Children.Add(Control);
SortedChildren = cnvDrawingArea.Children.OfType<FrameworkElement>().OrderByDescending(x => x, new Classes.DrawOrderComparer()).Cast<UIElement>().ToList();
我的理论是,排序发生在新控件甚至定义了父控件之前,因为它稍后会被某些事件设置。问题是我不知道那是什么事件以及我是否可以听它。
有人有想法么?