首页 > 解决方案 > 为什么在面板之间移动控件会导致延迟渲染出现异常?

问题描述

我正在尝试从一个面板重新父控件到另一个面板,如下所示:

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)

有问题的面板是 DockPanel 中的 4 个不同的 StackPanel,并且仅在某些 StackPanel 之间移动控件时才会发生。如果我只删除元素而不将它们添加到新面板,则永远不会引发异常,这让我想也许我必须在下一次渲染之前做一些事情来修复场景图?wpf 中有类似 UIElement.UpdateLayout 的东西吗?

我尝试了一些事情: - 将 oldPanel.IsVisible 设置为 false 修复了这个问题,但我希望这些面板仍然可见,因为我设置了它们的 minWidth。- 在所有面板(包括停靠面板)和被移动的控件上调用 InvalidateVisual InvalidateMeasure 和 InvalidateArrange。- 使用 ISetLogicalParent.SetParent。

我只是做错了吗?我在网上根本找不到任何关于重新育儿控制的例子。

标签: avaloniaui

解决方案


推荐阅读