Я пытаюсь переопределить элементы управления с одной панели на другую, как это:
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.
Я просто делаю это неправильно? Я не смог найти ни одного примера онлайн-перепроверки.