2010-09-25 4 views
0

У меня возникла проблема при копировании с rtf в richtextboxПроблема для copyn'g из rtf в richtextbox

при сериализации потерянного имущества. // НЕ сериализации свойства "жирный" и "цвет" и "размер"

Весь код:

string ConvertXamlToString(FlowDocument fd) 
{ 
string format = "@[email protected]{0}:{1}@[email protected]"; 

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

, если ввести все вручную, все хорошо. Как это исправить?

attach files

+1

Это поможет, если вы сократите свой код до соответствующих частей. – Val

+0

Спасибо. Я сделал. Это лучше? – Mediator

ответ

0

Хм, а полужирный и размер не являются свойствами, как таковые, они производные Span, что вам может понадобиться, чтобы разобрать их по отдельности итерируя Inlines свойство вашего Span, чтобы сохранить их

+0

Так что я понимаю, но нет другого выбора? – Mediator

+0

Не то, чтобы я знал об этом. Хотя функция восстановления должна быть достаточно простой, чтобы ее реализовать. – Val

Смежные вопросы