关于WPF焦点的一些问题

3

我有一个关于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 );
}

第一个问题:它可以工作,但我必须选择另一个窗口来“移除”我的应用程序的焦点(之后即使我在我的窗口上单击也不会再次获得焦点)。 第二个问题:当我移动或调整窗口大小时,修改只会在我放下窗口时发生。

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

1个回答

0

你可能想要看一下这个 Stack Overflow 帖子:如何在 C# 中使表单无法聚焦。答案专门针对 Windows Forms,但主要部分是使用 Win32 函数完成的,所以也许你可以从中得到一些启示......


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接