找不到MainWindow的invalidate方法

时间:2013-09-01 13:16:47

标签: c#

我正在试图弄清楚如何清除我在桌面上创建的绘图。听说最好的方法是使用this.Invalidate()。

问题是当我将其添加到代码时,Visual Studio无法识别该方法。我正在使用VS Express for Desktop 2012和.NET 4.5。

有什么想法吗?

错误讯息:

  

'WpfApplication1.MainWindow'不包含。的定义   '无效'且没有扩展方法'无效'接受第一个   可以找到'WpfApplication1.MainWindow'类型的参数(是吗?   缺少using指令或程序集引用?)

以下是代码:

public partial class MainWindow : Window
{
    public MainWindow()
    {

        InitializeComponent();

        System.Windows.Forms.Timer _timer = new Timer() { Interval = 1, Enabled = true };
        _timer.Tick += new EventHandler(Timer_Tick);

    }

    private void Timer_Tick(object sender, EventArgs e)
    {
        using (Graphics g = Graphics.FromHwnd(IntPtr.Zero))
        {
            System.Drawing.Point pt = System.Windows.Forms.Cursor.Position;

            g.DrawEllipse(Pens.Black, pt.X - 10, pt.Y - 10, 20, 20);                
        }

        this.Invalidate(); 
    }
}

编辑:

每个人都要感谢你们。

我尝试过使用RedrawWindow()但程序在每次开始测试时都会崩溃。有任何想法吗?我正在尝试使用此矩形rc更新桌面。

e.g。

RECT rc = new RECT(pt.X - 20,pt.Y - 20,pt.X + 20,pt.Y + 20);

RedrawWindow(IntPtr.Zero,rc,IntPtr.Zero,0x0400 / * RDW_FRAME * / | 0x0100 / * RDW_UPDATENOW * / | 0x0001 / * RDW_INVALIDATE * /);

有什么想法吗?

3 个答案:

答案 0 :(得分:1)

答案 1 :(得分:1)

Invalidate()方法是 Windows窗体方法,但您使用的是WPF。 在WPF中,使用InvalidateVisual(),WPF等效的Windows窗体“Invalidate()

答案 2 :(得分:1)

由于您在桌面上绘图无效主窗口不会有帮助。您需要使Desktop无效。

为此,请使用RedrawWindow功能。

这是RedrawWindow

的P / Invoke声明