Несколько вопросов о фокусе на WPF - PullRequest
3 голосов
/ 05 мая 2010

У меня небольшая проблема с фокусом на 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 голосов
/ 05 мая 2010

Возможно, вы захотите взглянуть на этот пост: Сделать форму не фокусируемой в C # . Ответ специфичен для Windows Forms. Тем не менее, основная часть выполняется с использованием функций Win32, так что, может быть, вы можете получить некоторые идеи оттуда ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...