以编程方式设置WPF属性

时间:2011-05-16 22:27:36

标签: .net wpf xaml

我有一个TextBlock控件,我声明性地将Text属性设置为{loc:Translate}

<TextBlock x:Name="Message" Text="{loc:Translate}" loc:TranslateExtension.Uid="myMessage"  />

在运行时,我将Text属性值更新为其他内容。然后,我需要将其重置为{loc:Translate}

我的问题是,如何以编程方式将Text设置为{loc:Translate}

1 个答案:

答案 0 :(得分:2)

  

当XAML处理器处理作为标记扩展的类型节点和成员值时,它会调用该标记扩展的ProvideValue方法,并将结果写入对象图或序列化流。 XAML对象编写器通过serviceProvider参数将服务上下文传递给每个此类实现。

tb.Text = new TranslateExtension().ProvideValue(null) as string;

除非缺少“正确的”IServiceProvider - 参数,否则应该是这样。

  

在典型用法中,.NET Framework XAML服务和已实现的XAML对象编写器将为其在XAML处理期间调用的所有值转换器方法提供服务提供程序。但是,为了提高健壮性,您应该为服务提供者本身和任何请求的服务提供空值的代码路径。如果在某些情况下应用了标记扩展,而XAML解析器基础结构提供的典型服务支持不可用,则可能会出现空值。

因此,根据您的扩​​展程序实施,您实际上可以将null传递给ProvideValue