WPF : A True WPF Browser Control That Can Bend It Like Beckham
A while ago I wanted to use the new .NET 3.5 SP1 WebBrowser control is a small demo WPF app that I was using to display streamed YouTube videos. And guess what, I was way disappointed the supposedly new rad control, was a con and it was actually no better than using a WPF Frame object or even hosting the WinForms WebBrowser control. The reason being that all of these internally are HWnd (therefor different graphics rendering pipeline) controls.
So no matter what you do they will always be square and appear on top of WPF content, which sucks really.
Luckily some clever fellas out there didn’t like this either and came up with some cool C++ dll called Awesomium which you can get over at
http://princeofcode.com/awesomium.php#download
And then to top that off Chris Cavanagh (Physics genius) wrapped it to make it WPF like. He calls this
WPF 3D Chromium Browser
Which you can find over at Chris Cavanaghs site using this Url
http://chriscavanagh.wordpress.com/2009/08/27/wpf-3d-chromium-browser/
Here is a screen shot of it working, You can get a better sample over at Chris’s site
The entire XAML looks like this
<Window x:Class="BrowserApp.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="500" Width="500" xmlns:chr="clr-namespace:Cjc.ChromiumBrowser;assembly=Cjc.ChromiumBrowser"> <Grid> <chr:WebBrowser x:Name="browser" IsEnabled="False" Width="300" Height="300" EnableAsyncRendering="False" RenderTransformOrigin="0.5,0.5"> <chr:WebBrowser.RenderTransform> <TransformGroup> <ScaleTransform CenterX="0.5" CenterY="0.5" ScaleX="0.75" ScaleY="0.75"/> <SkewTransform AngleX="15" AngleY="15"/> </TransformGroup> </chr:WebBrowser.RenderTransform> </chr:WebBrowser> </Grid> </Window>
As usual here is a small demo app .
http://sachabarber.net/wp-content/uploads/2009/11/Browser.zip
I should point out that it is Visual Studio 2010 and as such I had to set the following up in my App.Config to get it to work:
<?xml version="1.0"?> <configuration> <startup useLegacyV2RuntimeActivationPolicy="true"> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/> </startup> </configuration>


























A Real WPF WebBrowser « Chris Cavanagh’s Blog said
am November 17 2009 @ 9:21 pm
[...] For more examples, and an important note about VS2010, be sure to check out Sacha Barber’s related post. [...]
WPF 3D Chromium Browser « Chris Cavanagh’s Blog said
am November 17 2009 @ 9:24 pm
[...] more examples, and an important note about VS2010, be sure to check out Sacha Barber’s related post Possibly related posts: (automatically generated)WPF Skinning your WebsitesWPF Chromium [...]
Uwe said
am November 18 2009 @ 7:39 am
So what I am missing is a control similar to the Windows Forms WebBrowser control but implemented with Chromium.
As I understand this could be done with Awesomium.
Right?
sacha said
am November 18 2009 @ 8:41 am
Uwe
The standard WPF .NET 3.5 SP1 WebBrowser or WinForms WebBrower is rendered using the older legacy HWnd based (Paint) methods and is not drwan using the DirectX WPF pipeline. So as a result can not be transformed/scaled/rotated or used on 3d.
Awesomium is a C++ browser and Chromium wrapped this to allows this to be used in WPF.
Does that explain it.
Pete said
am November 18 2009 @ 4:45 pm
You’re a bit late with this bandwagon.
Also, check it out with a debug tool, leaks memory
sacha said
am November 18 2009 @ 5:14 pm
Fair enough then
sacha said
am November 18 2009 @ 5:15 pm
Chris someone just left a note saying this leaks memory on my blog, you may want to check it out.
Chris Cavanagh said
am November 18 2009 @ 5:26 pm
Pete – Could you post some more details on the memory leak you’ve seen? Any particular sites, or all sites? Also did you see it with the “WPF Chromium WebBrowser” demo, or the 3D / “YouCube” version? It’s always possible I’ve recently introduced a leak (I made some tweaks recently to help someone out, but didn’t test thoroughly). Any information would be appreciated; thanks
Fyi there’s now another guy contributing to the project on CodePlex; he’ll probably be a better tester than I am
Pete said
am November 19 2009 @ 9:33 pm
Chris / Sacha:
The leak was with an earlier version of the Awesomium.dll. I’m led to believe it’s been fixed, I’ve not been able to verify this, not had time.
In any case there’s another release due of Awesomium.
Good work Chris, Sacha just love your tube planner.
sacha said
am November 20 2009 @ 8:43 am
Pete, that’s great news, I am sure nither I or CHris wants to show leaky code on our blogs.
Very pleased you like my TubePlanner app, it took a while that one
Pete said
am November 20 2009 @ 4:24 pm
Hi Again
Just had a chat with a friend, who worked with this.
The Awesomium.dll was release V1.01 that was released start of 2009. I think there have been several other releases since that date.