将回车添加到 WPF 中的字符串资源

Posted

技术标签:

【中文标题】将回车添加到 WPF 中的字符串资源【英文标题】:Add carriage return to string resource in 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; 不起作用。向字符串资源添加新行的最佳方法是什么?

【问题讨论】:

【参考方案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>

【讨论】:

以上是关于将回车添加到 WPF 中的字符串资源的主要内容,如果未能解决你的问题,请参考以下文章

WPF中的资源简介DynamicResource与StaticResource的区别

PHP - 添加/删除回车返回到 base 64 编码的字符串

WPF中的资源简介DynamicResource与StaticResource的区别(转)

如何将字符串列表数据绑定到 WPF/WP7 中的 ListBox?

将 TM 上标添加到字符串

Android-是否可以将可点击链接添加到字符串资源中