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