【问题标题】:Some questions about focus on WPF关于专注于WPF的一些问题
【发布时间】:2010-05-05 08:12:48
【问题描述】:

我对专注于 WPF 有一点问题。 我想创建一个窗口,总是在顶部,并且永远不会获得焦点(即使我们点击它)。

这是我的解决方案:

public partial class SkinWindow : Window
{
    public SkinWindow()
    {
        InitializeComponent();
        Loaded += ( object sender, RoutedEventArgs e ) => SetNoActiveWindow();
    }

    private void SetNoActiveWindow()
    {
        WindowInteropHelper helper = new WindowInteropHelper( this );
        SetWindowLong( helper.Handle, GWL_EXSTYLE, WS_EX_NOACTIVATE );
        LockSetForegroundWindow( LSFW_LOCK );
    }

    const int GWL_EXSTYLE = -20;
    const int WS_EX_NOACTIVATE = 134217728;
    const int LSFW_LOCK = 1;

    [DllImport( "user32" )]
    public static extern bool LockSetForegroundWindow( uint UINT );

    [DllImport( "user32" )]
    public static extern IntPtr SetWindowLong( IntPtr hWnd, int nIndex, int dwNewLong );
}

第一个问题:它有效,但我必须选择另一个窗口来“移除”我的应用程序的焦点(即使我点击我的窗口也不会再次给出焦点)。 第二个问题:当我移动或调整窗口大小时,修改会在我放下窗口时发生。

您有任何想法/链接/文档吗? 谢谢你:)

【问题讨论】:

    标签: wpf windows focus


    【解决方案1】:

    您可能想看看这个 SO 帖子:Make a form not focusable in C#。答案是特定于 Windows 窗体的。不过,主要部分是使用 Win32 函数完成的,所以也许你可以从中得到一些想法......

    【讨论】:

      猜你喜欢
      • 2013-04-08
      • 1970-01-01
      • 1970-01-01
      • 2018-05-24
      • 2013-07-07
      • 2013-05-10
      • 2012-03-18
      • 2023-03-09
      • 2021-07-01
      相关资源
      最近更新 更多