2010-05-05 102 views
3

我在关注WPF时遇到了一些问题。 我想创建一个窗口,总是在顶部,并且永远不会获得焦点(即使我们点击它)。关于关注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); 
} 

第一个问题:它的作品,但我已经选择了其他的窗口中“删除”我的应用程序的焦点(焦点后不会再次放弃,即使我点击我的窗口)。 第二个问题:当我移动窗口或调整窗口大小时,当我放下窗口时会发生这些修改。

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

回答

0

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