gpt4 book ai didi

c# - 使自己的 WPF 控件无效

转载 作者:行者123 更新时间:2023-12-02 05:06:57 25 4
gpt4 key购买 nike

我有一个几天前制作的自定义 WPF 控件:

 public class MapContext : FrameworkElement{
//....
protected override void OnRender(DrawingContext dc) {
// Draw the map
if (mapDrawing != null) dc.DrawDrawing(mapDrawing);
}

mapDrawing 绘图在另一个线程中更新,其中计算要显示的所有几何图形,然后该线程通过调用 InvalidateVisual() 更新 UI:

Application.Current.Dispatcher.Invoke(DispatcherPriority.Render, new Action(delegate { InvalidateVisual(); }));

关于InvalidateVisualMSDN documentation说:

Invalidates the rendering of the element, and forces a complete new layout pass. OnRender is called after the layout cycle is completed.

这不是我想要的行为,因为 MapContext 控件布局没有改变。只是里面的图变了。

问题是否有一种正确的方法可以强制调用 OnRender 方法而不执行完整的布局传递?

提前致谢

最佳答案

不,没有布局 channel 就无法强制重新渲染。由于 WPF 使用保留模式系统,因此 OnRender() 不像以前的 WinAPI 那样工作。 OnRender() 只是存储绘图指令的集合,WPF 确定如何以及何时进行实际渲染。

如果您需要独立于大小调整来更改控件的外观,我建议您使用 DrawingVisual 之类的东西,并在需要更改时使用 RenderOpen() 添加您的 mapDrawing。

关于c# - 使自己的 WPF 控件无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8575203/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com