簡體   English   中英

在RichTextBox中從rtf復制問題

[英]Problem for copyn'g from rtf in richtextbox

從RichTextBox中的rtf復制時出現問題

序列化丟失的屬性時。 // NOT SERIALIZE屬性“粗體”,“顏色”和“大小”

所有代碼:

string ConvertXamlToString(FlowDocument fd)
{
 string format = "@TAG@{0}:{1}@TAG@";

 FlowDocument ss = new FlowDocument();

 for (int i = 0; i < fd.Blocks.Count; i++)
 {
  var block = (fd.Blocks as BlockCollection).ElementAt(i);
  if (block is Paragraph)
  {
   var p = new Paragraph();
   for (int y = 0; y < ((Paragraph)block).Inlines.Count; y++)
   {
    var inline = ((Paragraph)block).Inlines.ElementAt(y);
    if (inline is InlineUIContainer)
    {
     var elem = ((InlineUIContainer)inline).Child;
     if (elem is FlashControl)
     {
      TextBox mc = new TextBox() { Text = string.Format(format, "FlashControl", (elem as FlashControl).Flashp.Source) };
      p.Inlines.Add(mc);
     }
     else if (elem is MusicControl)
     {
      MusicControl mc = new MusicControl((elem as MusicControl).Path_file);
      p.Inlines.Add(mc);
     }
     else if (elem is Image)
     {
      Image mc = new Image();
      Image Last = (elem as Image);
      try
      {
       if (Last.Source is System.Windows.Media.Imaging.BitmapImage)
       {
        mc.Source = new BitmapImage(new Uri(((System.Windows.Media.Imaging.BitmapImage)(Last.Source)).UriSource.AbsolutePath));
       }
       else if(Last.Source is System.Windows.Media.Imaging.BitmapImage)
       {
        mc.Source = new BitmapImage(new Uri(((System.Windows.Media.Imaging.BitmapImage)(Last.Source)).UriSource.ToString()));
       }
      }
      catch { }
      p.Inlines.Add(mc);
     }
     else
     {
      p.Inlines.Add(elem);
     }
    }
    else if (inline is Run)
    {
     Run r = (inline as Run);
     string rSer = XamlWriter.Save(r);
     var inl1 = XamlReader.Parse(rSer);
     p.Inlines.Add(inl1 as Run);
    }
    else if (inline is Span)
    {
     Span r = (inline as Span);
     string rSer = XamlWriter.Save(r);// NOT SERIALIZE properties "bold" and "color" and "size"
     var inl1 = XamlReader.Parse(rSer);
     p.Inlines.Add(inl1 as Span);
    }
    else
    {
    }
   }
   ss.Blocks.Add(p);
  }
 }

 string aaa = XamlWriter.Save(ss);

 richtextbox.Document.Blocks.Clear();

 object f = XamlReader.Parse(aaa);
 richtextbox.Document = f as FlowDocument;
 return aaa;
}

代碼的主要部分:

else if (inline is Run)
{
    Run r = (inline as Run);
    string rSer = XamlWriter.Save(r);
    var inl1 = XamlReader.Parse(rSer);
    p.Inlines.Add(inl1 as Run);
}
else if (inline is Span)
{
    Span r = (inline as Span);
    string rSer = XamlWriter.Save(r);// NOT SERIALIZE properties "bold" and "color" and "size"
    var inl1 = XamlReader.Parse(rSer);
    p.Inlines.Add(inl1 as Span);
}

如果您手動輸入所有內容,則一切正常。 我該如何解決?

附加文件

嗯,好粗體和大小不是它們的屬性,它們是Span派生類,您可能需要通過迭代SpanInlines屬性以保留它們來分別解析它們

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM