c# - 设计时的 Windows 应用商店应用 ResourceLoader

标签 c# xaml windows-store-apps embedded-resource designer

我已经开始为 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/

相关文章:

c# - 比较数据表并将不匹配的行保存在第三个数据表中

C#、xunit、fscheck,使用自定义生成器或约束随机字符串编写基于简单属性的测试

c# - 如何使用 XAML 在 WPF 中列出颜色?

c# - Windows 8 XAML : Tint an Image object

c# - 带有文件的盒子,从 Windows 中看不到

c# - 为什么 IsWellFormedOriginalString 在文件 Uris 上失败?

wpf - 仅设计时控件,或者在哪里可以找到 'd' 命名空间的定义?

第一次调用 CanExecute 时 WPF CommandParameter 为 NULL

c# - 可以在样式内的 XAML 中使用绑定(bind)吗?

c# - 创建带有更新下载进度条的 ListView Windows 8 C# XAML