Разница между OnInitialized и OnSourceInitialized в WPF - PullRequest
0 голосов
/ 12 февраля 2019

Я пытался добавить глобальные горячие клавиши в WPF.

        var helper = new WindowInteropHelper(this);
        var handle = helper.Handle;
        var source = HwndSource.FromHwnd(handle);

Когда я помещаю этот фрагмент кода в метод переопределения OnInitialized, он возвращает значение 0 для переменной handle и завершается ошибкойв HwndSource.FromHwnd(handle).

Но, когда я помещаю его в метод переопределения OnSourceInitialized, он возвращает случайное значение для переменной handle и прекрасно работает в HwndSource.FromHwnd(handle).

Я былпытаясь понять, почему так происходит.
В чем разница между OnInitialized и OnSourceInitialized в WPF?

1 Ответ

0 голосов
/ 12 февраля 2019

Событие FrameworkElement.Initialized возникает, когда инициализируется FrameworkElement (элемент WPF). Здесь, в документе :

Это событие будет вызываться при каждом вызове методов EndInit или OnVisualParentChanged.Вызовы любого метода могли поступать из кода приложения или из-за поведения процессора расширяемого языка разметки приложений (XAML) при обработке страницы XAML.

Чем это означает, что это событие возникает, когда дерево XAMLобрабатывается.Он может быть вызван для любого FrameworkElement, включая Window.

Событие Window.SourceInitialized возникает, когда становится доступным описатель основного окна Win32.Он поднимается только на Window.Вы можете прочитать больше в HwndSource документации .

Это объяснение, почему вы получаете действительный дескриптор в Window.SourceInitialized обработчике событий и недопустимый дескриптор (0) в FrameworkElement.Initialized обработчик событий.

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