PresentationSource里面也没有HANDle
时间: 2023-09-09 15:05:46 浏览: 90
如果 PresentationSource 返回 null 或者 Handle 属性返回 IntPtr.Zero,说明该 WPF 控件没有与之关联的窗口句柄。这种情况通常发生在控件还没有被添加到可视化树中的时候。
如果确保该控件已经被添加到可视化树中,但是 PresentationSource 仍然返回 null,可以尝试强制进行布局更新,例如使用 UpdateLayout 方法。示例代码如下:
```csharp
myWpfControl.UpdateLayout();
var presentationSource = PresentationSource.FromVisual(myWpfControl);
var hwnd = presentationSource?.Handle ?? IntPtr.Zero;
```
如果仍然无法获取到窗口句柄,可以考虑使用其他方法,例如使用 VisualTreeHelper 类遍历控件的可视化树来查找与之关联的窗口。
相关问题
PresentationSource还是无法扩展HANDLE
如果 PresentationSource 仍然无法扩展 HANDLE,可能是因为该 PresentationSource 实例没有与任何窗口句柄相关联,或者已经被释放。
你可以使用 PresentationSource.IsDisposed 属性来检查 PresentationSource 实例是否已经被释放,如果该属性返回 true,则需要重新创建 PresentationSource 实例。
另外,如果 PresentationSource 实例与 WPF 控件相关联,但是 Handle 属性仍然为 IntPtr.Zero,则需要确保该 WPF 控件已经被添加到可视化树中,并且已经在屏幕上显示出来。如果该控件正在被异步加载,你需要等待控件完全加载完成后再尝试获取 PresentationSource 对象。
最后,如果以上方法仍然无法解决问题,那可能是因为 PresentationSource 实例的特定实现不能扩展 HANDLE。在这种情况下,你可能需要使用其他方法来实现你的需求,例如使用 Win32 API 来操作窗口句柄。
PresentationSource没有handle
如果 PresentationSource 返回 null 或者 Handle 属性返回 IntPtr.Zero,说明该 WPF 控件没有与之关联的窗口句柄。这种情况通常发生在控件还没有被添加到可视化树中的时候。
如果确保该控件已经被添加到可视化树中,但是 PresentationSource 仍然返回 null,可以尝试强制进行布局更新,例如使用 UpdateLayout 方法。示例代码如下:
```csharp
myWpfControl.UpdateLayout();
var presentationSource = PresentationSource.FromVisual(myWpfControl);
var hwnd = presentationSource?.Handle ?? IntPtr.Zero;
```
如果仍然无法获取到窗口句柄,可以考虑使用其他方法,例如使用 VisualTreeHelper 类遍历控件的可视化树来查找与之关联的窗口。
阅读全文