fal*_*aff 10 wpf prism onrender
自定义WPF控件会覆盖OnRender.该方法从自定义数据生成并显示路径.数据提供程序使用依赖项属性绑定.当数据发生变化时,依赖属性会为事件注册.此事件又调用InvalidateVisual().
但是,在InvalidateVisual()之后,并不总是调用OnRender.
我们使用Prism Framework和Region functionallity.所讨论的控件嵌入在这样的区域中,该区域被激活和停用.但是,只要区域处于活动状态,Control的属性"IsVisible"就为true.但是,当调用InvalidateVisual()时,OnRender方法不会被调用...
什么可以阻止OnRender方法被调用?
我刚刚也遇到了这个问题。
我有很多基于 VirtualizingStackPanel 内的 DynamicDataDisplay 图形组件(在 ListBox 内)的控件。
当有更多控件同时可见,但不足以让 VirtualizingStackPanel 在滚动时开始重新使用它们时,我会在 D3 AxisControl 类中看到此问题。由于某种原因,它在 OnRender 方法中做了很多工作,当某些内容发生变化时,它会尝试通过调用 InvalidateVisual 来触发该方法。
在问题案例中,问题控件调用 InvalidateVisual,但它们从未调用 MeasureOverride、ArrangeOverride或OnRender。有趣的是,大多数控件仍然有效,在一个特定的问题案例中,我发现一组 11 个控件中的最后 3 个控件无法正常工作。值得注意的是,这 3 个(并且只有这 3 个)在触发对 InvalidateVisual 的调用的数据绑定更新之前立即收到对 MeasureOverride 的调用。
最后,我设法通过在调用 InvalidateVisual 的同时添加对 InvalidateMeasure 的调用来修复它。
这是一个糟糕的解决方案,但它不是我们应用程序的性能关键部分,所以我似乎摆脱了它。