Мне нужно было определить порядок рисования детей, содержащихся на холсте. Так что я натыкался на этот Q/A:Нахождение порядка рисования на WPF Canvas.Children Issue
Это отлично работает большую часть времени, но иногда я получаю сообщение об ошибке из этого кода:
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();
Моя теория состоит в том, что сортировка происходит до того, как новый элемент управления даже имеет родителя, определенный, потому что получает набор позднее какого-либо события. Проблема в том, что я не знаю, какое это событие и могу ли я его слушать.
У кого-нибудь есть идеи?