设计时的 Windows 应用商店应用 ResourceLoader

Posted

技术标签:

【中文标题】设计时的 Windows 应用商店应用 ResourceLoader【英文标题】:Windows store app ResourceLoader at design time 【发布时间】:2013-11-29 01:20:41 【问题描述】:

我已经开始为 Windows 8.1 创建 Windows 应用商店应用程序,但现在遇到了本地化问题。

我想在设计时显示 .resw 文件中的字符串资源,但每次尝试都失败了,即使它在运行时有效。

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

我还尝试为视图模型上的字符串创建一个属性:

public string Title

    get  return ResourceLoader.GetForCurrentView("Strings").GetString("MainView_Title"); 

这在运行时有效,但在设计时它是空白的。

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

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

感谢您的帮助, 卢卡斯

【问题讨论】:

添加了一个新的修复程序,它应该为您提供您想要的设计器功能 (d)。 【参考方案1】:

旧方法

所以,你可以做几件事。

第一个(也是最简单的,因为您已经在使用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 开始。

新方法

创建一个引用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" />

【讨论】:

感谢您的回复。恐怕这正是我想要避免的。我不喜欢写两次,因为如果我要更改资源中的文本,我还必须在 XAML 中使用它的任何地方更新此文本,我认为这是不必要的冗余。 不幸的是,根据我的研究,这是需要的。设计图面实际上是针对样本数据而不是实际数据。 那么我将不得不尝试在没有这个的情况下进行管理。不过还是谢谢。【参考方案2】:

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

经过大量调查和实验,Nate 的解决方案似乎不适用于 VS2017 社区下 Win10 的 UWP 应用。 LocalizedString 方法在运行时工作得很好,但它似乎

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

在设计期间拒绝返回除 String.Empty 之外的任何内容。我做了很多实验,比如

ResourceContext.GetForViewIndependentUse().QualifierValues

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

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

【讨论】:

这确实有效,试试***.com/questions/45723217/…提供的解决方案

以上是关于设计时的 Windows 应用商店应用 ResourceLoader的主要内容,如果未能解决你的问题,请参考以下文章

Windows 应用商店应用着色器模型 4_0_level_9_3 和 VPOS

使用 APNS 时将应用程序从临时阶段转移到应用程序商店分发时的配置文件更改

Windows 11 新版 25163 推送!任务栏全新菜单应用商店更新文件资源管理器大量修复...

Windows 应用商店应用标准样式与 Windows 应用商店应用字体指南

Win10商店大清理:粗制滥造久不更新应用将被下架

Windows 11运行Android应用得到保障,亚马逊应用商店将支持AAB