wpf 如何获取当前Name Scope的所有者?

rm5edbpk  于 2023-04-07  发布在  其他
关注(0)|答案(1)|浏览(149)

我正在创建一个标记扩展。在其中我可以得到TargetObject
但是要使用名称,我需要当前NameScope的所有者。
它可能是TargetObject,但也可能是它在可视化树中的某个祖先。
目前,我只想到检查从NameScope.GetNameScope(DependencyObject)方法返回的所有祖先的可视化树。
有没有更好的方法来完成这项任务?
@BionicCode:在大多数情况下,命名范围是由XAML引擎隐式创建的。
你差不多猜到我需要什么了。本质上,我需要一个XAML中的祖先元素,它的对象是使用我的标记扩展创建的。不幸的是,根Window/Page/Popup上的搜索限制太窄了。它可以是任何UserControl,它可以是一个模板或数据模板。Сould甚至可以说“得到”从代码背后标记扩展。最具说明性的例子是通过处理程序的名称从代码隐藏中获取方法。但这只是一种特殊情况。

ktca8awb

ktca8awb1#

你可以把TargetObject转换成FrameworkElementFrameworkContentElement,然后使用它的FindNameRegisterNameUnregisterName方法。或者在FrameworkElement中有一个internal static INameScope FindScope(DependencyObject d, out DependencyObject scopeOwner)方法可以保存你同样的麻烦。你可以通过反射来使用它。

相关问题