I am starting with Windows 8 and I am trying to convert HTML to a RichTextBlock.
I have read that I could use this function : HtmlUtilities.ConvertToText in a TextBlock but I can’t find a way to use this function in a RichTextBlock!
From what I understand and tried I can’t extend the RichTextBlock so I can’t apply this function everytime a RichTextBlock is called.
Also, I can’t find any way to bind text to a RichTextBlock and building a parser just for simple HTML (I only want paragraphs and italics/bolds) seems an overkill. Also, I have no idea where I should do this parsing since I the RichTextBlock seems unextendable.
I can’t use the WebView because I need transparency (and from what I have read the WebView doesn’t have it).
EDIT
@mydogisbox made me see I was getting too far on my research.
I can use HtmlUtilities.ConvertToText in the getter of a property that I can bind in the RichTextBlock. I couldn’t bind it because I was trying to do
<Run Text="{Binding TextHTML}" /> without a <Paragraph> tag.
However HtmlUtilities.ConvertToText doesn’t preserve italics or bolds. Only paragraphs :/.
I ended up using a package avaiable on gitHub that converts from HTML to a RickTextBlock.
Basiclly you only need to open the Package Manager Console (Tools > Library Package Manager > Package Manager Console) and install the package running
Install-Package RichTextBlock.Html2Xaml.Then you open RichTextBlockProperties.cs and you have the lines you need to copy. In my case I had to add the namespace:
And then you can bind your property that has HTML using:
Some problems and some solutions
A problem I have found with this library is how it handles simple html with no divs. Like:
This prints:
However, I wanted something like this:
So I had to wrap the second paragraph in a div (and all paragraphs except the first could be wrapped).
If you wrap the first paragraph then you will have an extra new line.
So far this is the best solution I have found. If you find better I apreciate it since I am testing and learning. If you find a better solution I will accept yours.
Be carefull
This approach will crash if you have symbols like "<" or "&" in your html. I suggest that you replace those chars before you try to use this library.