【问题标题】:Add carriage return to string resource in WPF将回车添加到 WPF 中的字符串资源
【发布时间】:2011-04-27 19:15:31
【问题描述】:

我的应用程序将所有本地化文本存储在字符串资源字典中,如此处建议http://msdn.microsoft.com/en-us/library/bb295251(VS.85).aspx

        <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">

  <!-- String resource that can be localized -->
  <system:String x:Key="localizedMessage">en-US Message</system:String>

</ResourceDictionary>

我的问题是,如何在字符串资源中添加新行并使其在 TextBlock 中使用时正确呈现。

执行此内联工作:

<TextBlock Name="test" Text="Line 1&#13;Line 2"> </TextBlock>

但是,在字符串资源中使用&amp;#13; 不起作用。向字符串资源添加新行的最佳方法是什么?

【问题讨论】:

    标签: wpf textblock carriage-return


    【解决方案1】:

    更新:更新的答案 - 更好的选择

    XAML 解析器根据以下规则对空白进行规范化。

    http://msdn.microsoft.com/en-us/library/cc189036(VS.95).aspx#whitespace

    要指示您的 sys:String 保留空格,请将 xml:space="preserved 应用于它:

    <sys:String x:Key="MyLocalizedString" xml:space="preserve">this&#13;&#10;is&#13;&#10;my&#13;&#10;resource</sys:String>
    

    【讨论】:

    • 本地化字符串选项确实有效,但绑定表达式有点难看。
    • 是的。但这就是您所坚持的 - 如果您可以在 LocalizedString 类型上提供显式或隐式转换运算符并让解析器拾取它,那就太好了,但事实并非如此。我可以展示一个涉及附加属性的更复杂的选项,但我不确定从长远来看会不会更好。
    • 使用附加属性选项更新了上面的答案。
    • 注意:更新后的答案更具体为 XAML(使用实际的非变通解决方案)
    【解决方案2】:

    当您在资源视图中输入字符串资源时,您可以通过按 Shift + Enter 来添加 CR/LF。它将添加换行符,您将能够看到它。检索资源字符串并将其设置为文本块上的文本将产生再现换行符(或多个换行符)的预期效果。就我而言,我想在一个文本块中模拟两个段落。我不喜欢其他方法,因为它需要翻译成另一种语言来处理两个字符串。我想将其视为单个字符串资源,以便翻译人员了解他们正在翻译的内容的完整上下文。

    【讨论】:

      【解决方案3】:

      所以,显然已经有一段时间了,但对于我这种情况的人来说,这可能会有所帮助。就我而言,我有一个独立的 XML 资源文件,我已经在其中使用...

      var strVal = (string)Application.Current.FindResource(key);
      return strVal;
      

      ... 在我自己的辅助类中加载资源字符串。所以对我来说,最简单的解决方案就是插入一个对 Replace 的调用,如下所示:

      var strVal = (string)Application.Current.FindResource(key);
      strVal = strVal.Replace(@"\n", Environment.NewLine);
      return strVal;
      

      我的 StringResources.xaml 中的示例允许我使用转义字符 \n,如下所示....

      <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="resKeyValue1">The source field "{0}" is already mapped to the destination field "{1}".\n\n
          Do you want to additionally map the source field "{0}" to the destination field "{2}"?</system:String>
      
          ...
      </ResourceDictionary>
      

      【讨论】:

        猜你喜欢
        • 2018-08-02
        • 1970-01-01
        • 2013-06-27
        • 2021-12-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多