IRootObjectProvider在Designer中不可用
本文关键字:Designer IRootObjectProvider | 更新日期: 2023-09-27 18:00:09
我有点像WPF新手,所以请大家对我宽容一点!
我正在尝试实现一个MarkupExtension,在其中我想引用正在调用扩展的XAML的根元素(我需要它的Name元素来进行查找)。
以下代码在运行时运行良好,但在设计时,我在设计器窗口中遇到错误。
[MarkupExtensionReturnTypeAttribute(typeof(string))]
public class TranslateExtension : MarkupExtension
{
public TranslateExtension(string key)
{
}
public override object ProvideValue(IServiceProvider serviceProvider)
{
var root = ((System.Xaml.IRootObjectProvider)serviceProvider).RootObject as FrameworkElement;
return root.Name;
}
}
在的设计器中给我一个错误
无法强制转换类型为的对象"InstanceBuilderServiceProvider"到类型"System.Xaml.IRootObjectProvider".
这有点不言自明——显然ProvideValue是用一个无法转换为RootObjectProvider的服务提供程序调用的。
周围有工作吗?还是我在做一些非常愚蠢的事情?
难道你不应该做类似的事情吗
var service = (IRootObjectProvider)serviceProvider.GetService(typeof(IRootObjectProvider));
然而,它仍然对设计者没有帮助。。。
试试这个:
var rootObjectProvider = serviceProvider.GetService(typeof(IRootObjectProvider)) as IRootObjectProvider;
IRootObjectProvider目前在WPF 4中不可用,它将在将来包含。您可以通过编程方式使用支持IRootObjectProvider的Xaml服务,但WPF还不支持它。