我有一个TextBlock
控件,我声明性地将Text
属性设置为{loc:Translate}
。
<TextBlock x:Name="Message" Text="{loc:Translate}" loc:TranslateExtension.Uid="myMessage" />
在运行时,我将Text属性值更新为其他内容。然后,我需要将其重置为{loc:Translate}
。
我的问题是,如何以编程方式将Text
设置为{loc:Translate}
?
答案 0 :(得分:2)
当XAML处理器处理作为标记扩展的类型节点和成员值时,它会调用该标记扩展的ProvideValue方法,并将结果写入对象图或序列化流。 XAML对象编写器通过serviceProvider参数将服务上下文传递给每个此类实现。
tb.Text = new TranslateExtension().ProvideValue(null) as string;
除非缺少“正确的”IServiceProvider
- 参数,否则应该是这样。
在典型用法中,.NET Framework XAML服务和已实现的XAML对象编写器将为其在XAML处理期间调用的所有值转换器方法提供服务提供程序。但是,为了提高健壮性,您应该为服务提供者本身和任何请求的服务提供空值的代码路径。如果在某些情况下应用了标记扩展,而XAML解析器基础结构提供的典型服务支持不可用,则可能会出现空值。
因此,根据您的扩展程序实施,您实际上可以将null
传递给ProvideValue
。