- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图在 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
orOnVisualParentChanged
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/
我试图在 WPF 中添加全局热键。 var helper = new WindowInteropHelper(this); var handle = helper.Ha
我是一名优秀的程序员,十分优秀!