如何强制窗口重新绘制?

6
我有一个全屏窗口,使用以下代码:

我有一个全屏窗口,使用以下代码:

WindowStyle = System.Windows.WindowStyle.None;
WindowState = System.Windows.WindowState.Maximized;
Topmost = true;

在Win7下它工作正常,但在WinXP下,当窗口全屏时,一些窗口元素不会重新绘制。有没有办法强制窗口进行完整的重绘和布局更新?

更新:如果我使用Alt-Tab切换到另一个应用程序,然后再切换回我的应用程序,所有内容都能被正确地重新绘制。


http://msdn.microsoft.com/en-us/library/system.windows.uielement.invalidatevisual.aspx - gandjustas
不幸的是,在这种情况下似乎不起作用。问题仍然存在。 - user626528
1
这个问题是否与您的情况有关呢?http://stackoverflow.com/questions/122857/wpf-transparent-borders-causes-the-ui-to-stop-redrawing - Shadow The Spring Wizard
@Shadow Wizard,看起来很相似,但我使用的是.NET 4。 - user626528
1个回答

6
您可以通过使用Windows API来强制窗口重新绘制。
示例类实现:
public static class WindowsApi
{
    private const int WmPaint = 0x000F;

    [DllImport("User32.dll")]
    public static extern Int64 SendMessage(IntPtr hWnd, uint msg, IntPtr wParam, IntPtr lParam);

    public static void ForcePaint(this Form form)
    {
        SendMessage(form.Handle, WmPaint, IntPtr.Zero, IntPtr.Zero);
    }
}

使用方法:

Form testForm = new Form();
testForm.ForcePaint();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接