2010-05-05 3 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 Forms. Однако основная часть выполняется с использованием функций Win32, поэтому, возможно, вы можете получить некоторые идеи оттуда ...

Смежные вопросы