gpt4 book ai didi

WPF:动态标记扩展 - 重新渲染/更新值

转载 作者:行者123 更新时间:2023-12-04 15:38:05 24 4
gpt4 key购买 nike

我正在使用标记扩展在 WPF 应用程序中加载国际化字符串,如下所示:

<Button Content="{Translate MyText}"/>

我的标记扩展名为“TranslateExtension”,它从数据库中搜索键“MyText”的值。它在
ProvideValue(IServiceProvider serviceProvider)

返回正确字符串的方法。一切正常。

我的问题是,ProvideValue-Method 永远不会再次调用,并且在语言更改时无法从数据库中提取新字符串。我现在需要一种方法来使返回值“动态”,使 Button 重新加载它的 xaml 并重新使用标记扩展,无论它是通过更改语言时抛出的事件还是其他什么。如何让系统再次调用 ProvideValue-Method?我试过喜欢
InvalidateVisual() InvalidateArrange() InvalidateMeasure() UpdateLayout()...

我希望我说清楚了。请随时询问您认为您能够提供想法或解决方案的更多信息。
谢谢

最佳答案

嗯,解决方案是很简单的想法。

ProvideValue 仅被调用一次,但 serviceProvider 参数还为您提供对象实例和属性 (PropertyInfo)。这就是您稍后更新属性所需的全部内容。

我会在 App.cs 中创建一个静态事件,比如说 CultureChanged;
在 ProvideValue 方法中获取对象实例和属性并存储它们。附加到 CultureChanged 事件并在其 EventHandler 中使用反射设置属性值。就是这样,只是要小心内存泄漏。

有 MarkupExtension 使用这种方法并允许动态缓存文化:
http://www.codeproject.com/KB/WPF/WpfMultiLanguage.aspx

关于WPF:动态标记扩展 - 重新渲染/更新值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/992903/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com