如何在关闭事件中从wpf窗口中删除焦点?

时间:2012-11-14 17:39:12

标签: c# wpf focus

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

我的WPF窗口就像普通“Windows窗口”上的图层一样。每次我点击“WPF Windows图层”上的内容时,我都不想失去焦点。

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

希望你能帮助我,因为我无法在互联网上找到关于这个罕见问题的任何内容。

2 个答案:

答案 0 :(得分:1)

你可以做的是尽量减少窗口。 这将关注“最后一个窗口”。

window.WindowState = System.Windows.WindowState.Minimized;

答案 1 :(得分:1)

你需要用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);
}