设计器中没有IRootObjectProvider?

时间:2011-06-24 10:33:01

标签: c# wpf binding

我有点像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。

有什么工作吗?或者我做的事情真的很傻?

3 个答案:

答案 0 :(得分:1)

你不应该做像

这样的事吗
var service = (IRootObjectProvider)serviceProvider.GetService(typeof(IRootObjectProvider));

然而,设计师仍然没有帮助......

答案 1 :(得分:0)

试试这个:

var rootObjectProvider = serviceProvider.GetService(typeof(IRootObjectProvider)) as IRootObjectProvider;

答案 2 :(得分:-1)

到目前为止,WPF 4中没有IRootObjectProvider,将来会包含它。您可以以编程方式使用支持IRootObjectProvider的Xaml服务,但WPF尚不支持它。