gpt4 book ai didi

c# - WPF中如何通过代码将字符串绑定(bind)到动态资源

转载 作者:太空狗 更新时间:2023-10-29 23:38:02 25 4
gpt4 key购买 nike

我目前正在从事一个项目,我使用 Caliburn 在 View 和 ViewModel 之间进行绑定(bind)。为了能够在运行时在语言之间切换,我有单独的资源文件,其中包含应用程序中使用的所有字符串。一些例如TextBlock 文本绑定(bind)绑定(bind)到字符串资源之一,如下所示:

SampleView.xaml <TextBlock Text={DynamicResource Foo.Bar.Baz} .../>

Language.en-US.xaml <system:String x:Key="Foo.Bar.Baz">Im a string</system:String>

当我将我的应用程序的文化更改为另一种语言时,到 Foo.Bar.Baz 的动态 绑定(bind)会使字符串在运行时更新为新语言。太棒了!

但是,应用程序中的一些文本属性绑定(bind)到带有 Caliburn 的 ViewModel 中的字符串,如下所示:

SampleView.xaml <TextBlock Text={Binding SampleText} .../>

SampleViewModel.cs public string SampleText { get; set; }

SampleText 的值设置为来自 Language.en-US.xaml 的字符串资源,如下所示:
...
SampleText = Application.Current.FindResource("Foo.Bar.Baz") as string;
...

不幸的是,当我更改应用程序区域性时,字符串 SampleText未更新。

因此问题是:如何将 SampleText 设置为 Language.en-US.xaml 中的字符串资源,它会在我更改应用程序区域性时自动更新?

注意:通过对 this StackOverflow question 的评论我读到有可能通过这样的 bindnig: SampleText = Application.Current.Resource["Foo.Bar.Baz"] as string;但是,这对我不起作用。

最佳答案

您可以将您的资源引用为动态资源。要在代码隐藏中执行此操作:

frameworkElement.SetResourceReference(dependencyProperty, resourceKey);

例如:

mySampleTextBlock.SetResourceReference(TextProperty, "Foo.Bar.Baz")

关于c# - WPF中如何通过代码将字符串绑定(bind)到动态资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31871746/

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