如何设置一个对话框后,聚焦控制?

我工作的一个XBAP应用程序,用户主要使用键盘进行导航。 当我显示一个MessageBox ,我按下Enter键即可关闭它,但随后的主应用程序似乎并没有重新获得焦点。 我必须手动点击鼠标在屏幕上把焦点放回应用程序。

有没有解决的办法?

编辑

我可以验证的应用程序仍然具有逻辑焦点,但它只是没有键盘焦点

--------------解决方案-------------

using System.Runtime.InteropServices;
using System.Windows.Interop;

public class Interop
{
[DllImport("user32.dll")]
public static extern bool SetForegroundWindow(IntPtr hWnd);

[DllImport("user32.dll")]
public static extern IntPtr GetForegroundWindow();

public static IntPtr GetWindowHandle(Window window)
{
return new WindowInteropHelper(window).Handle;
}
}

// In main window, when the MessageBox is closed
IntPtr window = Interop.GetWindowHandle(this);
IntPtr focused = Interop.GetForegroundWindow();
if (window != focused)
{
Interop.SetForegroundWindow(window);
}

http://tech.avivo.si/2009/11/how-to-focus-window-in-wpf-when-it-gets-out-of-focus/

我发现,工作的黑客,虽然我不喜欢它,因为我觉得它关系我的观点对我的ViewModel

我使用的是IsFocused AttachedProperty控件绑定到后面查看布尔属性。 同样的观点也订阅一个DisplayError显示一个事件MessageBox错误,并复位IsFocused财产之后,因此更新UI。 最后的修改是为了更新我的ViewModels发布错误的EventAggregator ,而不是用自己的处理MessageBox ,这可能是更好的反正。

我想它的工作原理,即使我不喜欢它

不知道这是否会帮助你的情况,但在我的情况下这是确定我将焦点设置返回主窗口,这是能够与实现

App.Current.MainWindow.Focus();

只要确保正确初始化主窗口,这可能不是如果一个闪屏或某些登录窗口或最初的东西抓住了主窗口的角色(用的StartupUri IE),然后没有别的随后更新的情况。

这为我工作,因为我是处理所有的键盘事件在主窗口的水平驱动更新到我的视图模型。

分类:WPF 时间:2015-03-14 人气:4
本文关键词: WPF,对话,聚焦,XBAP
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.763 (s). 10 q(s)