gpt4 book ai didi

c# - WPF 中 OnInitialized 和 OnSourceInitialized 的区别

转载 作者:行者123 更新时间:2023-11-30 21:30:10 28 4
gpt4 key购买 nike

我试图在 WPF 中添加全局热键。

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

当我将这段代码放在 OnInitialized 覆盖方法中时,它为 handle 变量返回值 0 并在 中失败HwndSource.FromHwnd(句柄).

但是,当我把它放在 OnSourceInitialized 覆盖方法中时,它会为 handle 变量返回一些随机值,并且在 HwndSource.FromHwnd(handle).

我试图理解为什么会出现这种行为。
WPF 中的 OnInitialized 和 OnSourceInitialized 有什么区别?

最佳答案

FrameworkElement.Initialized 事件在初始化 FrameworkElement(WPF 元素)时引发。 Here in the docs :

This event will be raised whenever the EndInit or OnVisualParentChanged methods are called. Calls to either method could have come from application code, or through the Extensible Application Markup Language (XAML) processor behavior when a XAML page is processed.

这意味着,在处理 XAML 树时会引发此事件。它可以为任何 FrameworkElement 引发,包括 Window

当底层 Win32 窗口句柄可用时,将引发 Window.SourceInitialized 事件。它仅在 Window 上引发。您可以在 HwndSource documentation 中阅读更多内容.

这就是为什么您在 Window.SourceInitialized 事件处理程序中获得有效句柄而在 FrameworkElement.Initialized 事件处理程序中获得无效句柄 (0) 的原因。

关于c# - WPF 中 OnInitialized 和 OnSourceInitialized 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54646062/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com