Почему перемещение элементов управления между панелями вызывает исключение при отложенном рендеринге? - PullRequest
1 голос
/ 23 апреля 2020

Я пытаюсь переопределить элементы управления с одной панели на другую, как это:

oldPanel.Children.Remove(control);
newPanel.Children.Add(control);

, которая прекрасно работает с каждым элементом управления, пока я не попытаюсь сделать это с последним дочерним элементом oldPanel, где я получаю :

System.NullReferenceException
HResult=0x80004003
Message=Object reference not set to an instance of an object.
Source=Avalonia.Visuals
StackTrace:
at Avalonia.Rendering.DeferredRenderer.Render(IDrawingContextImpl context, VisualNode node, IVisual layer, Rect clipBounds)

Рассматриваемые панели - это 4 разные StackPanel в DockPanel, и это происходит только при перемещении элементов управления между определенными StackPanel. Если я только удаляю элементы и не добавляю их на новую панель, исключение никогда не возникает, это заставляет меня задуматься, может быть, мне нужно что-то сделать для исправления графа сцены перед следующим рендером? Есть ли что-то вроде UIElement.UpdateLayout в wpf?

Некоторые вещи, которые я пробовал: - установка oldPanel.IsVisible в false исправляет это, но я хочу, чтобы эти панели все еще были видны, потому что у меня установлен minWidth. - вызов InvalidateVisual InvalidateMeasure и InvalidateArrange на всех панелях (включая панель док-станции) и перемещаемый элемент управления. - используя ISetLogicalParent.SetParent.

Я просто делаю это неправильно? Я не смог найти ни одного примера онлайн-перепроверки.

...