我有点像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。
有什么工作吗?或者我做的事情真的很傻?
答案 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尚不支持它。