我已经开始为Windows8.1创建一个Windows应用程序,现在我遇到了一个关于本地化的问题。
我想在设计时从.resw文件中显示一个字符串资源,但是每次尝试都失败了,即使它在运行时工作。
当使用x:Uid属性时,我仍然必须提供Text属性(即TextBlock),并且我不喜欢写文本两次。
我还尝试为视图模型上的字符串创建一个属性:
public string Title
{
get { return ResourceLoader.GetForCurrentView("Strings").GetString("MainView_Title"); }
}这在运行时起作用,但在设计时是空白的。
所以问题是,是否有一种方法可以在XAML-designer中显示来自.resw文件的资源?
更具体地说,ResourceManager类是否允许在设计时读取.resw文件?
谢谢你的帮助,卢卡斯
发布于 2013-11-15 19:17:36
旧法
所以,有几件事你可以做。
第一个(也是最简单的,考虑到您已经在使用x:Uid )就是将文本提供给文本字段。x:Uid-related值将覆盖其中的任何内容。
<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");
}希望这有助于和快乐的编码!
编辑:似乎有一种新的方式来做到这一点,至少在Windows8.1。
新方法
ResourceLoader的类(类似于上面描述的属性)。ResourceLoader返回值。
公共类LocalizedStrings {公共字符串此字符串键{ get {返回LocalizedStrings}App.xaml中,定义这种类型的StaticResource。
<公共:本地化字符串x:Key=“本地化”/> 现在,当您想使用输入键MainView_Title访问您的属性时,请使用以下命令。这是更详细,但它应该翻译在设计师和应用程序本身。
<TextBlock Text="{Binding Source={StaticResource Localized}, Path=[MainView_Title]}" />如果您想要的话,您可以随意调整它,使其更具可读性,例如:
<TextBlock Text="{Binding [MainView_Title], Source={StaticResource Localized}}" />发布于 2017-06-27 18:26:05
这是一个古老的线程,但是既然Nate为Win8.1提供了一个优雅的解决方案,我想我应该在这里问.
经过大量的调查和实验,Nate的解决方案似乎并不适用于Win10在VS2017社区下的应用程序。LocalizedString方法在运行时工作得很好,但它似乎
App.ResourceLoader.GetForViewIndependentUse().GetString(key);在设计期间拒绝返回除String.Empty以外的任何内容。我做了很多实验
ResourceContext.GetForViewIndependentUse().QualifierValues在运行时(工作)和设计时间(不工作)之间似乎是相同的。
我想知道是否有人遇到过并解决了这个问题。Nate?:)
https://stackoverflow.com/questions/20004634
复制相似问题