【问题标题】:Cannot find invalidate method for MainWindow找不到 MainWindow 的无效方法
【发布时间】:2013-09-01 13:16:46
【问题描述】:

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

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

有什么想法吗?

错误信息:

'WpfApplication1.MainWindow' 不包含对 'Invalidate' 并且没有扩展方法 'Invalidate' 接受第一个 可以找到“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 更新桌面。

例如

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*/);

有什么想法吗?

【问题讨论】:

  • 您需要使用原生 API 调用使 桌面窗口 无效。
  • 你使用的是WPF,而不是Winforms

标签: c#


【解决方案1】:

由于您是在桌面上绘图,因此使主窗口无效并无济于事。您需要使Desktop 无效。

要做到这一点,请使用RedrawWindow 函数。

这是RedrawWindow 的 P/Invoke 声明

【讨论】:

  • 感谢您的提醒。我试过使用 Pinvoke,但由于某种原因,RedrawWindow() 似乎没有重绘任何东西。
  • 我建议您使用不适合您的代码创建一个新问题。会尽力提供帮助。
  • 谢谢,创建新问题@stackoverflow.com/questions/18684323/…
【解决方案2】:

【讨论】:

    【解决方案3】:

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

    【讨论】:

    • InvalidateVisual() 不等同于 Windows.Forms Invalidate()。它要贵得多。有效更改 WPF 绘图视觉对象的正确方法是创建一个 DrawingGroup,在 OnRender() 期间将其放置在视觉树中,然后稍后将其 Open() 并更新其中的绘图命令。 WPF 会自动更新 UI。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多