如何在WinFormsHost可见时重新绘制它?

时间:2010-09-28 20:51:05

标签: c# wpf winforms

我在WPF控件上的WindowsFormsHost中有一个winforms控件。 WPF控件只在某些时候可见,当它变得可见时,winforms控件的内容通常会改变。

当WPF控件的ViewModel发生更改时,我更改了winforms控件的内容,WPF控件变为可见。

不幸的是,winforms控件的先前内容被重新绘制,就好像来自可视缓存一样。我通过调试器运行它,我知道winforms控件正在更新它的数据,但是在我重新调整程序窗口大小(显然触发重绘)时它不会重新绘制。

我在winform控件上尝试了Invalidate(),并且在WPF控件的DataContextChanged事件处理程序内的WPF控件上使用了InvalidateVisual(),InvalidateArrange()和InvalidateMeasure(),但似乎因为WPF控件不是在这一点上可见(它即将变得可见)这些方法调用被吞下。

任何有关如何在托管WPF控件可见后立即强制重写WinFormsHost-ed winforms控件的任何人都有任何聪明的想法?

3 个答案:

答案 0 :(得分:0)

您是否尝试使IsVisibleChanged事件处理程序中的WinForms控件无效?

答案 1 :(得分:0)

您可以在托管控件上显示Refresh()后立即调用{{3}}。 Refresh(),根据文档:

  

强制控件使其客户区无效并立即重绘自身和任何子控件。

答案 2 :(得分:0)

原来这是由于底层数据结构无法通知它已经改变 - 与绘制方法完全没有关系! :(感谢你的帮助。