Asi*_*itK 8 .net c# wpf interop hwndsource
我正在使用以下代码:
protected override void OnSourceInitialized(EventArgs e)
{
...
....
HwndSource source = PresentationSource.FromVisual(this) as HwndSource;
...
...
}
Run Code Online (Sandbox Code Playgroud)
在某些系统中,"源"值出现为空,我无法找到原因......
从.Net 4.0开始,您HwndSource
无需先显示窗口即可访问:
var helper = new WindowInteropHelper(this);
var hwndSource = HwndSource.FromHwnd(helper.EnsureHandle());
Run Code Online (Sandbox Code Playgroud)
小智 7
我想你可能要等到UI被渲染,直到你尝试分配Hwnd.尝试将其放在Window.Loaded的事件处理程序中.
这发生在我之前,我在代码隐藏的构造函数中调用InitializeComponent()之后进行了Hwnd赋值.它总是回来null,当我走过去看到用户界面尚未出现时,这可能会感觉到.我将它弹出到_Loaded处理程序中,然后在点击该行之前UI呈现,所有突然的'this'都停止为null.
WumpasTamer 的回答是正确的。我只想为其他寻求“交钥匙”解决方案的人添加一个快速代码示例。如果您已经在使用 WPF,则window
没有必要,但是如果您正在使用 Winforms 并且想要使用PresentationSource
,则需要使用它。
void Main()
{
var window = new Window
{
Width = 0,
Height = 0,
WindowStyle = WindowStyle.None,
ShowInTaskbar = false,
ShowActivated = false
};
window.Loaded += a_Loaded;
window.Show();
}
void a_Loaded(object sender, EventArgs e)
{
var s = (Window) sender;
var source = PresentationSource.FromVisual(s);
//...
s.Close();
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
7877 次 |
最近记录: |