我正在开发一个面板在WindowsFormHost
范围内的WPF应用程序。该面板包含需要经常重绘的图形,绘制这些图形的代码位于OnPaint()
事件中。问题是,OnPaint()
事件似乎永远不会发生。为了调试,我在表单中添加了一个按钮,并使用按钮的单击事件处理程序来调用Invalidate()事件。即使我打电话给Invalidate()
,我似乎也无法触发Paint事件。我的代码隐藏看起来像这样:
public MainWindow()
{
InitializeComponent();
}
private void myPanel_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
{
/// Draw stuff
}
private void Button_Click(object sender, RoutedEventArgs e)
{
myPanel.Invalidate();
}
我的XAML看起来像这样:
<Window x:Class="MyProject.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:wf="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms"
Title="MainWindow" Height="350" Width="525">
<Grid>
<StackPanel Name="stackPanel">
<Button Content="Button" Click="Button_Click"/>
<WindowsFormsHost x:Name="windowsFormsHost" >
<WindowsFormsHost.Child>
<wf:Panel x:Name="myPanel" Paint="myPanel_Paint"/>
</WindowsFormsHost.Child>
</WindowsFormsHost>
</StackPanel>
</Grid>
我已经读过这篇文章:WindowsFormHost Paint Event Not Firing
...但我们似乎没有遇到同样的问题,因为我的XAML确实引用了我的Paint事件处理程序,OnPaint()
仍然没有触发。
我已经尝试将myPanel.Update()
添加到我的Button_Click
活动中,在我myPanel.Invalidate()
的号召下。这也行不通。
我在这里做错了什么? Invalidate()
是否可能无效?