4

我想从我的 wpf 窗口中移除焦点并将焦点设置回最后一个“windows 窗口”,就像我关闭普通 wpf 窗口时发生的那样。

我的 WPF 窗口就像普通“Windows 窗口”上的一层。我只是不想在每次单击“层 WPF Windows”上的某些内容时失去焦点。

我的解决方法是使用 Button_Click 事件方法将焦点设置回最后一个“Windows 窗口”。

希望您能帮助我,因为我无法在互联网上找到有关此不常见问题的任何信息。

4

2 回答 2

2

你需要用 P/Invoke 弄脏你的手。我们将需要 WinAPI 中的这些函数:

[DllImport("user32.dll")]
static extern IntPtr GetWindow(IntPtr hWnd, uint wCmd);
const uint GW_HWNDNEXT = 2;

[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool SetForegroundWindow(IntPtr hWnd);

[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool IsWindowVisible(IntPtr hWnd);

如何使用它们:

private void Button_Click(object sender, RoutedEventArgs e)
{
    // Get the WPF window handle
    IntPtr hWnd = new WindowInteropHelper(Application.Current.MainWindow).Handle;

    // Look for next visible window in Z order
    IntPtr hNext = hWnd;
    do
        hNext = GetWindow(hNext, GW_HWNDNEXT);
    while (!IsWindowVisible(hNext));

    // Bring the window to foreground
    SetForegroundWindow(hNext);
}
于 2012-11-14T20:52:59.017 回答
1

您可以做的是最小化窗口。这会将焦点放在“最后一个窗口”上。

window.WindowState = System.Windows.WindowState.Minimized;
于 2012-11-14T17:55:37.817 回答