【问题标题】:Silverlight 4 RichTextBox - can't restore Xaml with text containing curly bracesSilverlight 4 RichTextBox - 无法使用包含大括号的文本恢复 Xaml
【发布时间】:2010-06-08 17:39:04
【问题描述】:

我们有一个 Silverlight 应用程序,它使用 RichTextBox 作为富文本编辑器,供用户创建电子邮件。

我们实际上有自己的序列化程序,但本质上我们是在保存和恢复 Xaml。据我所知,不可能恢复任何包含花括号的文本。

您可以通过创建一个 RichTextBox 并在其中输入类似于 {weird} 的内容来相当容易地演示这一点。然后获取文本框的 .Xaml 属性并将其设置在另一个文本框 - kablooie 的 .Xaml 属性上。

由于我们有自己的序列化程序,我尝试使用<Run Text="{} the real {Text} here" /> 转义 Run 元素的 Text 成员。这没什么区别。我试过用 { 替换大括号但这也不起作用。

【问题讨论】:

    标签: .net silverlight xaml richtextbox


    【解决方案1】:

    在此确认问题并与团队核实。如果 Run starts 带有大括号,它似乎会抛出一个值异常。我正在调查。

    【讨论】:

      【解决方案2】:

      Windows Phone 7 (Mango) RichTextBox 中也会出现此问题。我发现了一个workaround here,它包括在每个Run 的开头和结尾放置一个零宽度非连接符‌ 字符。与使用零宽度空间相反,如果您在开头有一个左大括号和在末尾有一个右大括号,这也适用。

      【讨论】:

        【解决方案3】:

        这听起来像是一个 xml 问题。您是否尝试过将数据封装在 CDATA 块中以封装任何特殊字符?

        <richtext>
        
            <![CDATA[
            function matchwo(a,b)
            {
            if (a < b && a < 0) then
              {
              return 1;
              }
            else
              {
              return 0;
              }
            }
            ]]>
        
        <richtext>
        

        【讨论】:

        • 不幸的是,Silverlight XamlReader 不支持将运行文本放入 CDATA 块中。
        【解决方案4】:

        Silverlight 开发人员已确认这是一个错误。如果运行文本以“{”或空格后跟“{”开头,则会发生这种情况。因为我们有自己的序列化程序,所以我可以在每次运行开始时插入一个零宽度空格 (​) 来解决问题。

        【讨论】:

          【解决方案5】:

          尝试使用{}{weird}(打开和关闭的花括号)转义

          【讨论】:

          • 没有帮助(我们首先尝试过 - 我应该在问题中提到它)。问题是 Silverlight RichTextBox 中的一个错误。
          猜你喜欢
          • 1970-01-01
          • 2012-05-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-03-10
          • 1970-01-01
          • 2018-09-25
          • 1970-01-01
          相关资源
          最近更新 更多