将回车添加到 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 Line 2"> </TextBlock>
但是,在字符串资源中使用&#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 is my 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的区别(转)