我试图在WPF中添加全局热键。
var helper = new WindowInteropHelper(this);
var handle = helper.Handle;
var source = HwndSource.FromHwnd(handle);
当我将这段代码放入OnInitialized
重写方法中时,它返回handle
变量的值0
,并在HwndSource.FromHwnd(handle)
中失败。
但是,当我把它放在OnSourceInitialized
重写方法中时,它会为handle
变量返回一些随机值,并在HwndSource.FromHwnd(handle)
中工作得很好。
我只是想弄明白为什么会这样。
OnInitialized和OnSourceInitialized在WPF中有什么区别?
发布于 2019-02-12 09:13:04
初始化FrameworkElement.Initialized
( WPF元素)时会引发FrameworkElement
事件。在这里的医生
每当调用
EndInit
或OnVisualParentChanged
方法时,都会引发此事件。对这两种方法的调用可能来自应用程序代码,或者在处理XAML页面时通过可扩展应用程序标记语言(XAML)处理器行为调用。
此事件是在处理XAML树时引发的。它可以为任何FrameworkElement
(包括Window
)引发。
当基础Window.SourceInitialized
窗口句柄可用时,将引发Win32事件。它只在Window
上提出。您可以在文档中阅读更多内容。
这就是为什么在Window.SourceInitialized
事件处理程序中获得有效句柄而在FrameworkElement.Initialized
事件处理程序中获得无效句柄(0)的原因。
https://stackoverflow.com/questions/54646062
复制相似问题