我正在开发一个 WPF 应用程序,该应用程序在WindowsFormHost
. 面板包含需要经常重绘的图形,绘制这些图形的代码位于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()
不是真的无效吗?