4

通常のwpfウィンドウを閉じたときに発生するように、wpfウィンドウからフォーカスを削除し、フォーカスを最後の「ウィンドウウィンドウ」に戻したいです。

私の WPF ウィンドウは、通常の「Windows ウィンドウ」上のレイヤーのように機能します。「レイヤーWPFウィンドウ」で何かをクリックするたびにフォーカスを失いたくないだけです。

私の回避策のアイデアは、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 に答える