views:

28

answers:

1

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

A: 

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

Val
so I understand, but no other choice?
simply denis
Not that im aware of. Though a recusive function should be easy enough to implement.
Val