Windows在设计时存储应用程序ResourceLoader

我已经开始为Windows 8.1创建Windowsapp store应用,现在我遇到了有关本地化的问题。

我想在设计时从.resw文件中显示字符串资源,但是每次尝试这样做都会失败,即使它在运行时也能正常工作。

当使用x:Uid属性时,我仍然需要提供Text属性(即对于TextBlock),我不喜欢写两次文本。

我还尝试在viewmodel上为字符串创建一个属性:

public string Title { get { return ResourceLoader.GetForCurrentView("Strings").GetString("MainView_Title"); } } 

这在运行时工作,但在设计时它是空白的。

所以问题是,有没有办法在XAML设计器中显示来自.resw文件的资源?

更具体地说,ResourceManager类是否允许在设计时读取.resw文件?

谢谢你的帮助,卢卡斯

旧方法

所以,你可以做几件事。

第一个(也是最简单的,假设您已经使用x:Uid )只是将文本提供给Text字段。 x:Uid相关值将覆盖其中的任何内容。

  

第二种方法是使用你已经拥有的属性,然后检查应用程序是否处于设计时间(通过几种不同的方法),然后返回一个常量值(如果是)和资源(如果不是)。

 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

          

现在,当您想使用输入键MainView_Title访问您的属性时,请使用此选项。 它更冗长,但它应该在设计器和应用程序本身中进行翻译。

  

如果您愿意,可以将其随机播放,以便更具可读性,例如:

  

这是一个老线程,但由于Nate为Win8.1问题提供了这样一个优雅的解决方案,我想我会在这里问…

经过大量的调查和实验,Nate的解决方案似乎不适用于VS2017社区的Win10 UWP应用程序。 LocalizedString方法在运行时工作正常,但它出现了

 App.ResourceLoader.GetForViewIndependentUse().GetString(key); 

拒绝在设计时返回String.Empty以外的任何内容。 我做了很多实验和类似的事情

 ResourceContext.GetForViewIndependentUse().QualifierValues 

运行时(工作)和设计时间(不工作)之间似乎相同。

我想知道是否有人遇到过这个并解决了它。 内特? 🙂