avaloniaui - 为什么在面板之间移动控件会导致延迟渲染出现异常?
问题描述
我正在尝试从一个面板重新父控件到另一个面板,如下所示:
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。
我只是做错了吗?我在网上根本找不到任何关于重新育儿控制的例子。
解决方案
推荐阅读
- python - 如何减去字典中的值
- java - 我如何在java中使用拆分器^
- python - Django模板不尊重不同时区的日期时间
- reactjs - 使用 Google Books API 时收到 403 响应错误代码
- angular - ngOnInit 中未定义 Angular Web 组件(元素)输入
- javascript - 仅在订阅 httpClient observables 后,如何从父组件方法调用子组件方法?
- javascript - 在 ReactJS 中进行并行异步等待调用
- r - BatchGetSymbols - 重塑输出
- python - 在 Python 中为连续数据生成马尔可夫转移矩阵
- firebase - 如何使用 Flutter 在 Firestore 中显示图像文件