我已经开始为 Windows 8.1 创建 Windows 应用商店应用程序,现在遇到了有关本地化的问题。
我想在设计时显示 .resw 文件中的字符串资源,但每次尝试都失败了,即使它在运行时有效。
使用 x:Uid 属性时,我仍然必须提供 Text 属性(即对于 TextBlock),并且我不喜欢将文本写入两次。
我还尝试为视图模型上的字符串创建一个属性:
public string Title
{
get { return ResourceLoader.GetForCurrentView("Strings").GetString("MainView_Title"); }
}
这在运行时有效,但在设计时它是空白的。
所以问题是,有没有办法在 XAML 设计器中显示 .resw 文件中的资源?
更具体地说,ResourceManager 类是否允许在设计时读取 .resw 文件?
感谢您的帮助,
卢卡斯
旧方法
因此,您可以做几件事。
第一个(也是最简单的,因为您正在使用x:Uid
已经)只是将文本提供到文本字段中。这x:Uid
相关值将覆盖其中的任何内容。
<TextBlock Text="MyText" x:Uid="MainView_Title"/>
第二种方法是使用您已有的属性,然后检查应用程序是否处于设计时间(通过几种不同的方法),如果是,则返回一个常量值,如果不是,则返回资源。
public string Title
{
if(ViewModelBase.IsInDesignTimeStatic) //Mvvm Light's easy accessor
return "My Text";
return ResourceLoader.GetForCurrentView("Strings").GetString("MainView_Title");
}
希望这对您有所帮助,祝您编码愉快!
编辑:至少从 Windows 8.1 开始,似乎有一种新方法可以做到这一点。
新方法
- 创建一个引用 a 的类
ResourceLoader
(类似于上面描述的属性)。
-
创建一个索引属性访问器,它接受字符串键并从ResourceLoader
.
public class LocalizedStrings
{
public string this[string key]
{
get
{
return App.ResourceLoader.GetForViewIndependentUse().GetString(key);
}
}
}
-
In your App.xaml
,定义一个StaticResource
这种类型的。
<Application.Resources>
<ResourceDictionary>
<common:LocalizedStrings x:Key="Localized"/>
</ResourceDictionary>
</Application.Resources>
现在,当您想使用进入钥匙访问您的财产时MainView_Title
, 用这个。它更冗长,但它应该在设计器和应用程序本身中进行翻译。
<TextBlock Text="{Binding Source={StaticResource Localized}, Path=[MainView_Title]}" />
如果您愿意,可以将其打乱以使其更具可读性,例如:
<TextBlock Text="{Binding [MainView_Title], Source={StaticResource Localized}}" />
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)