[英]Localize strings in XAML UI in UWP
我的 UWP 應用程序的Resources.resw
文件中有一個名為info_278
的資源條目。 我有 3 個場景需要使用此資源,但看起來我需要復制它以適應不同的場景。 場景如下。
代碼中的錯誤消息內容
var displayErrorOnPopup = ResourceHandler.Get("info_278");
來自 XAML 的 TextBlock Text 屬性(看起來像info_278.Text需要的新條目)
<TextBlock x:Uid="info_278" Margin="10,0,0,0" />
XAML 的按鈕內容屬性(看起來像info_278.Content需要的新條目)
<Button x:Uid="info_278" Margin="10,0,0,0" />
如何在不復制.resw
文件中的資源的情況下繼續操作?
避免重復的唯一方法是使用ResourceLoader在代碼隱藏中設置字符串值。 因為您可以直接訪問目標控件的特定屬性。 像這樣:
var resourceLoader = Windows.ApplicationModel.Resources.ResourceLoader.GetForCurrentView();
this.TextBlock.Text = resourceLoader.GetString("info_278");
如果不打算在后面的代碼中進行,那我不得不說沒有辦法避免資源字符串的重復。 您應該為不同的 XAML 方案添加info_278.Text和info_278.Content 。
您可以創建一個標記擴展。 我在 WinUI 3 中使用過它,但也應該在 UWP 中工作。
using Microsoft.UI.Xaml.Markup;
using Windows.ApplicationModel.Resources;
namespace MyApp;
[MarkupExtensionReturnType(ReturnType = typeof(string))]
public class StringResourceExtension : MarkupExtension
{
private static readonly ResourceLoader _resourceLoader = new();
public StringResourceExtension() { }
public string Key { get; set; } = "";
protected override object ProvideValue()
{
return _resourceLoader.GetString(Key);
}
}
然后在 XAML 中:
...
local="using:MyApp"
...
<TextBlock Text="{local:StringResource Key=info_278}" />
<Button Content="{local:StringResource Key=info_278}" />
Button
的Content
可以是TextBlock
:
<Button>
<TextBlock x:Uid="MyTextId" Style="{StaticResource MyTextBlockStyle}" />
</Button>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.