前端控件绑定uid可以在更改语言重启之后自动显示当前语言的信息。可是如果button按钮点击之前显示"hello",点击之后显示"Pig",应该怎么改?
- 前端按钮
<Button x:Name="testLanguage_btn"
x:Uid="ButtonHello"
Click="button1_Click" />
-
资源文件
中文和英文下的资源文件都定义:
-
后端代码
private void button1_Click(object sender, RoutedEventArgs e)
{
ResourceContext.GetForViewIndependentUse().Reset();
var _resourceLoader = ResourceLoader.GetForViewIndependentUse();
string x = testLanguage_btn.Content.ToString();
string y = _resourceLoader.GetString("ButtonHello/Content");
if ( x== y)
{
testLanguage_btn.Content = _resourceLoader.GetString("ButtonPig/Content");
}
else
{
testLanguage_btn.Content = _resourceLoader.GetString("ButtonHello/Content");
}
}
过程:
本来一开始查的代码是_resourceLoader = ResourceLoader.GetForCurrentView();
,报错,后来要在括号里加"Localization",也不行,最后使用GetForViewIndependentUse方法,不会报错但是查出来的是空字符串,发现getstring函数中需要加斜杠和相关属性。
参考链接:https://github.com/microsoft/microsoft-ui-xaml/issues/5940
查的两个方法的不同:
ResourceLoader.GetForViewIndependentUse()
用途:获取一个与特定视图无关的资源加载器。
适用于需要在应用的多个部分使用同一资源加载器的场景,例如在后台任务或其他不依赖于 UI 视图的组件中。
行为:不依赖于当前活动的视图上下文。
可以在后台线程中使用,因为它不涉及 UI 线程。
ResourceLoader.GetForCurrentView()
用途:获取与当前视图关联的资源加载器。
适用于需要在特定视图中使用资源的场景。
行为:依赖于当前活动的视图上下文。
只能在 UI 线程中使用,因为它与视图有关联。
选择哪种方法:
如果你在应用程序的视图(UI)中使用资源,并且需要根据当前视图的上下文加载资源,请使用 ResourceLoader.GetForCurrentView()。
如果你在非 UI 线程中使用资源,或在不依赖于特定视图上下文的情况下使用资源,请使用 ResourceLoader.GetForViewIndependentUse()。