2

我正在开发一个 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()不是真的无效吗?

4

0 回答 0