Problem for copyn'g from rtf in richtextbox

风流意气都作罢 提交于 2019-12-25 04:56:27

问题


I have a problem when copying from rtf in richtextbox

when serializing lost property. // NOT SERIALIZE properties "bold" and "color" and "size"

All code:

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;
}

main part of the code:

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);
}

if you enter everything manually, all is well. How do I fix this?

attach files


回答1:


Hmm, well bold and size aren't properties as such, they're derivatives of Span, you might need to parse them individually by iterating the Inlines property of your Span to preserve them



来源:https://stackoverflow.com/questions/3793830/problem-for-copyng-from-rtf-in-richtextbox

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!