2010-05-05 197 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函數完成的,所以也許你可以從那裏得到一些想法...