【问题标题】:How can I access a string table that is in a XAML file from code?如何从代码访问 XAML 文件中的字符串表?
【发布时间】:2010-10-22 15:42:24
【问题描述】:

我有一个 XAML 字符串表,当我需要从 XAML 中的控件中引用它时,它正在发挥作用。

但是,我也可以访问它以在其他代码部分中使用它——例如我的模型中的验证消息。由于您无法将资源文件添加到 silverlight,因此我需要使用它。

必须有人知道我需要调用什么来获取资源文件,最好是强类型的,以便智能感知可以避免我的健忘。

资源文件定义

<ResourceDictionary
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:system="clr-namespace:System;assembly=mscorlib">

    <system:String x:Key="test">test</system:String>
</ResourceDictionary>

【问题讨论】:

    标签: silverlight silverlight-4.0 resourcedictionary


    【解决方案1】:

    为什么不直接使用resource files (RESX),而不是在XAML 中列出字符串?这样,Visual Studio 将使用 (publicresxfilecodegenerator) 围绕您的资源创建包装器,您将能够摆脱代码和 XAML 中的魔术字符串。

    【讨论】:

    • 这是我尝试做的——我非常喜欢将 UI 字符串与内部字符串分开的想法——这通常是错误消息而不是工具提示,但你没有资源选项卡一个 silverlight 项目设置(你知道你在哪里有构建选项等),
    • 您必须手动将一个或多个 RESX 文件添加到您的项目中。当你这样做时,Visual Studio 使用 RESXFILECODEGENERATOR 在你的文件周围创建一个 wapper,然后你可以将该文件用作具有属性的静态类。
    • 谢谢,你是对的。我希望我问过你回答的问题,因为这是我在放弃之前最初想要的。
    【解决方案2】:

    您可以使用索引器来接收它。一旦你引用了资源字典,你就可以使用:

    string test = (string)resources["test"];
    

    详情请见Referencing Resources from Code

    【讨论】:

    • 没有办法让智能感知自动完成?我真的很讨厌用字符串连接东西。所以容易出错。不过谢谢你的回答。
    • @John:不。它不是类型安全的,也不是“真正的”类型——更像是字典(因此,ResourceDictionary)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多