我在WPF控件上的WindowsFormsHost中有一个winforms控件。 WPF控件只在某些时候可见,当它变得可见时,winforms控件的内容通常会改变。
当WPF控件的ViewModel发生更改时,我更改了winforms控件的内容,WPF控件变为可见。
不幸的是,winforms控件的先前内容被重新绘制,就好像来自可视缓存一样。我通过调试器运行它,我知道winforms控件正在更新它的数据,但是在我重新调整程序窗口大小(显然触发重绘)时它不会重新绘制。
我在winform控件上尝试了Invalidate(),并且在WPF控件的DataContextChanged事件处理程序内的WPF控件上使用了InvalidateVisual(),InvalidateArrange()和InvalidateMeasure(),但似乎因为WPF控件不是在这一点上可见(它即将变得可见)这些方法调用被吞下。
任何有关如何在托管WPF控件可见后立即强制重写WinFormsHost-ed winforms控件的任何人都有任何聪明的想法?
答案 0 :(得分:0)
您是否尝试使IsVisibleChanged
事件处理程序中的WinForms控件无效?
答案 1 :(得分:0)
您可以在托管控件上显示Refresh()后立即调用{{3}}。 Refresh()
,根据文档:
强制控件使其客户区无效并立即重绘自身和任何子控件。
答案 2 :(得分:0)
原来这是由于底层数据结构无法通知它已经改变 - 与绘制方法完全没有关系! :(感谢你的帮助。