【问题标题】:Where is IsHandleCreate property in WPF controls library?WPF 控件库中的 IsHandleCreate 属性在哪里?
【发布时间】:2013-09-28 16:45:00
【问题描述】:

在我的 C# WinForms 应用程序中,我会在执行某些操作之前检查控件上的 IsHandleCreated,尤其是那些来自作为 Invoke 调用目标的代码的操作。我在 WPF 中看不到该属性(当前使用 TextBlock 控件)。在 WPF 中确保控件在访问之前具有句柄的等效属性或操作是什么?

【问题讨论】:

  • 只是出于好奇:为什么在 WPF 世界中需要句柄?
  • 您可能正在寻找Loaded 事件。

标签: c# .net wpf wpf-controls


【解决方案1】:

如果要从异步方法调用 UI 线程,则必须使用

Application.Current.Dispatcher

至于在访问之前确保控件有句柄......你需要使用这个sn-p:

HwndSource hwnd = (HwndSource)HwndSource.FromVisual(textBox1);

textBox1 是您的 wpf 控件的名称/ID。

【讨论】:

  • 请注意,HwndSource.FromVisual 为 WPF 窗口中的所有控件返回相同的 HwndSource(以及因此相同的窗口句柄),即包含控件的窗口。原因是 WPF 中的控件不是单独的窗口,因为它们通常在 WinForms 中。
  • 不知道。谢谢。
  • @Clemens 这是否意味着当我像使用 WinForms 应用程序那样跨线程执行操作时,我不必担心检查控件的窗口句柄是否有效(已创建)?
  • 如前所述,WPF 控件没有自己的窗口句柄。因此,您无法检查一个。从另一个线程更新 UI 的调用必须通过 Dispatcher 完成。
猜你喜欢
  • 2011-07-21
  • 2016-07-18
  • 2010-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-25
  • 2013-05-24
  • 1970-01-01
相关资源
最近更新 更多