我已经开始为 Windows 8.1 创建 Windows 应用商店应用程序,但现在我遇到了有关本地化的问题。
我想在设计时显示 .resw 文件中的字符串资源,但每次尝试都失败了,尽管它在运行时有效。
当使用 x:Uid 属性时,我仍然必须提供 Text 属性(即对于 TextBlock)并且我不喜欢将文本写两次。
我还尝试为 View 模型上的字符串创建一个属性:
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"/>
第二种方法是像您已有的那样使用该属性,然后检查应用是否处于设计时(通过几种不同的方法),如果是则返回常量值,如果是则返回 Resource不是。
public string Title
{
if(ViewModelBase.IsInDesignTimeStatic) //Mvvm Light's easy accessor
return "My Text";
return ResourceLoader.GetForCurrentView("Strings").GetString("MainView_Title");
}
希望这对您有所帮助,祝您编码愉快!
编辑:似乎有一种新方法可以做到这一点,至少从 Windows 8.1 开始是这样。
新方法
- 创建一个引用
ResourceLoader
的类(类似于上述属性)。 创建一个接受字符串键并从
ResourceLoader
返回值的索引属性访问器。public class LocalizedStrings { public string this[string key] { get { return App.ResourceLoader.GetForViewIndependentUse().GetString(key); } } }
在您的
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}}" />
关于c# - 设计时的 Windows 应用商店应用 ResourceLoader,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20004634/