调用Invalidate()时不会触发Paint事件

时间:2015-06-17 21:31:11

标签: c# wpf events paintevent

我正在开发一个面板在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()是否可能无效?

0 个答案:

没有答案