【问题标题】:Databind Resource File in XAMLXAML 中的数据绑定资源文件
【发布时间】:2023-04-10 03:22:01
【问题描述】:

对于本地化,我在 .NET 中使用资源文件(.resx 文件)功能,但我想知道是否有一种智能方法可以直接在 XAML 中对各种本地化属性进行数据绑定?

资源文件似乎只公开静态属性,我不知道如何从视图模型或其他资源字典中绑定。

另外,如果可能的话,我希望它在设计时与 Expression Blend 一起工作。

【问题讨论】:

    标签: c# wpf silverlight xaml windows-phone-7


    【解决方案1】:

    这是我的做法。

    WPF:

    1. 创建一个资源文件并在同一个程序集中创建一个具有公共构造函数的类。确保资源文件标记为公开。

    2. 在您的 xaml 文件中 - 在命名空间中添加对此位置的引用

      xmlns:res="clr-namespace:MyProject.StringResources"

    3. 为您的文本属性使用以下绑定

      TextProperty="{x:Static res:ResourceFileName.ResourceKey}"

    银光:

    1. 按照上述步骤 1 和 2,然后将资源文件作为资源添加到您的用户控件或应用程序级资源中:

      <res:ResourceFileName x:Key="resourcesLabels"/>

    2. 为您的文本属性使用以下绑定:

      TextProperty="{Binding ResourceKey, Source={StaticResource resourceLabels}}"

    【讨论】:

    • 这似乎适用于 WPF。但是,似乎不支持 Silverlight x:Static。关于如何处理的任何想法?
    【解决方案2】:

    与 Geek 提出的非常相似,但我认为更容易一些:

    在同一个程序集中创建一个类,它继承资源文件并公开一个公共构造函数,然后改用这个类。

    public class ResourcesProxy : Properties.Resources
    {
        /// <summary>
        /// resolves the problem of internal constructor in resources.designer.cs
        /// in conjunction with xaml usage
        /// </summary>
        public ResourcesProxy() : base()
        {
        }
    }
    

    【讨论】:

    • 我相信你会在这里被限制在一个资源文件中。
    • 您为每个 resx 文件添加一个代理类。对于 WPF,{x:Static ...} 是最简单的。
    猜你喜欢
    • 2023-03-16
    • 1970-01-01
    • 2013-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多