c#如何更改窗口焦点onMouseEnter事件

时间:2009-05-21 00:10:52

标签: wpf focus mouse window click

我有一个WPF应用程序,当鼠标光标移过它时,我想成为当前的焦点窗口。目前我有一个onMouseEnter事件,当鼠标移过它时会改变光标,所以我知道系统正在识别它,但是我真正想要的是应用程序本身变得集中,好像使用的东西已经点击了它 - 所以我然后可以执行其他操作。目前,如果我移动它,光标会改变,但如果另一个应用程序,例如 - 记事本有焦点,焦点将返回到之后。

在onMouseEnter处理程序中,我尝试过“this.Focus()”和“this.Activate()”,但它们都没有像我点击应用程序那样产生相同的效果。

有什么想法吗?

3 个答案:

答案 0 :(得分:1)

WPF C#将一个MouseEnter事件附加到Grid控件的示例。如果另一个应用程序窗口具有焦点,它将删除它并将焦点附加到主窗口,就像用户单击它一样。

    private void GrdContent_MouseEnter(object sender, MouseEventArgs e)
    {
        Application.Current.MainWindow.Activate();
    }

答案 1 :(得分:0)

编辑:发布的答案不适用于WPF。遗憾。

请尝试查看此内容而不是WPF:http://blogs.msdn.com/nickkramer/archive/2006/03/18/554235.aspx

答案 2 :(得分:0)

在WPF中,只需将此行添加到MainWindow构造函数中即可获得预期的结果。

MouseEnter += (s, e) => Activate();

仅当您不与任何其他窗口交互时,此原始的一行答案才有效。即使在这种情况下,下面的命令也可以使用,但是您需要Nuget程序包“ AutoItX.Dotnet”。

private IntPtr myHandle;
public MainWindow() {
  myHandle =  new System.Windows.Interop.WindowInteropHelper(this).Handle;
  MouseEnter += (s, e) => {
    Activate();
    if (AutoIt.AutoItX.WinActive(myHandle) == 0)
      AutoIt.AutoItX.WinActivate(myHandle);
    };