2014-02-24 55 views
1

我目前正试图端口马修Manela的"Converting between RTF and XAML"代码示例的WinRTXAML喷吹成RichEditBox

我有工作的HTML XAML代码,但我得到它为RichEditBox时碰钉子。

Matthew的代码是基于WPF的,并使用以下函数将XAML转换为RTF。

private static string ConvertXamlToRtf(string xamlText) 
{ 
    var richTextBox = new RichTextBox(); 
    if (string.IsNullOrEmpty(xamlText)) return ""; 
    var textRange = new TextRange(richTextBox.Document.ContentStart, richTextBox.Document.ContentEnd); 
    using (var xamlMemoryStream = new MemoryStream()) 
    { 
     using (var xamlStreamWriter = new StreamWriter(xamlMemoryStream)) 
     { 
      xamlStreamWriter.Write(xamlText); 
      xamlStreamWriter.Flush(); 
      xamlMemoryStream.Seek(0, SeekOrigin.Begin); 
      textRange.Load(xamlMemoryStream, DataFormats.Xaml); 
     } 
    } 
    using (var rtfMemoryStream = new MemoryStream()) 
    { 
     textRange = new TextRange(richTextBox.Document.ContentStart, richTextBox.Document.ContentEnd); 
     textRange.Save(rtfMemoryStream, DataFormats.Rtf); 
     rtfMemoryStream.Seek(0, SeekOrigin.Begin); 
     using (var rtfStreamReader = new StreamReader(rtfMemoryStream)) 
     { 
      return rtfStreamReader.ReadToEnd(); 
     } 
    } 
} 

我试着用RichEditBox在WinRT中重写这一点,但遇到了一些问题。最值得注意的是,WPF TextRange接受XAML数据格式,但WinRT ITextRange没有这个。但是,我知道我可以将XAML直接注入到控件中。

有没有什么办法从RichTextBlock复制文本并以编程方式将其粘贴到RichEditBox中?

,否则,有没有办法将HTML转换为RTF,在WinRT/Windows商店应用程序中工作?

+0

只有一个评论。不是同一个问题,但可能会发现一些亮点。 http://underground.infovark.com/2011/03/03/highlighting-query-terms-in-a-wpf-textblock/ – Paparazzi

+0

再次不一样,但可能有助于http://stackoverflow.com/questions/3728584/ how-to-display-search-results-in-a-wpf-items-control-with-highlight-query-term – Paparazzi

+0

谢谢,虽然我没有突出问题的问题,但在RichEditBox或RichTextBlock中都很容易。我无法将内容从一个移动到另一个。 – roryok

回答

1

我从罗布·卡普兰我的回答对MSDN Windows应用论坛

http://social.msdn.microsoft.com/Forums/windowsapps/en-US/c5f4e679-c563-463c-b812-05b16cd5720f/converting-html-to-rtf-using-richeditbox-and-richtextbox?forum=winappswithcsharp

直接报价:

“你必须自己做转换的RichEdiBox没有任何本地转换能力,它直接呈现RTF并且不会将其转换为Xaml,这与WPF实现不同,后者转换RTF而不是直接显示它。

那么,就是这样。我目前正在修改一个开源的RTF库以用于WinRT。完成后我会发布。

编辑

抢错了!它可能,虽然通过解决方法。我想出了如何使用DataPackage类来做到这一点。完整答案在这里:https://stackoverflow.com/a/22093837/352867

+0

如果图像包含在HTML中,则不起作用。 – Shefali

+0

@Shefali我想这取决于图像来自何处,以及它们是否具有绝对路径等。可以将src中的相对路径转换为绝对路径,然后进行复制 – roryok