Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Make WPF control over the web browser

Tags:

browser

c#

wpf

I have a WPF application in which I have an embedded web browser control. I want to show an animation over the web browser at a certain time, but the problem is that the WPF controls, when kept over the web browser are not visible.

Is there any way to show my user control over the web browser?

like image 537
Cipher Avatar asked Feb 09 '12 07:02

Cipher


People also ask

Can WPF be targeted to Web browser?

All replies. WPF only runs on windows. You can make a type of wpf application called xbap which runs in a browser.

Is WPF still relevant in 2020?

It was in 2006 that Windows Presentation Foundation (WPF) was released with . NET framework 3.0. Over the years it got improved and it is still now in the market in 2021.

What browser does WPF use?

A WPF Browser application is an app that runs in-browser as an XBAP (Xaml Browser Application). You can find a little more information on the uses and reasons to use XBAPs here. This thread on MSDN might help also. Show activity on this post.

Is WPF phased out?

WPF is not dead in any way. It is still the preferred technology for developing desktop applications on Windows and very much alive and being continuously worked on. WPF is part of the . NET Framework and the .


3 Answers

Please answer me this first,

Is this Web Browser control the WPF Web Browser Control or Winform webbrowser control hosted in WinFormHost?

For any WPF control to show animation over it, did you explore ...

  1. Placing your control in Grid or Canvas and then placing an stretched Border (which has running animation in it) as the last child of the grid/canvas?
  2. Adorner with constantly changing drawing context to simulate animations?
  3. Transparent Popup with animation, whose static placement is done (bound to control's absolute left, top positions and actual height & width properties) over the control?

Try the transparent popup approach for web browser control ...

    <Grid>
        <WebBrowser x:Name="WebBrowser1"/> 
        <Popup IsOpen="{Binding StartAninmation}"
              AllowsTransparency="True"
              Grid.RowSpan="99"
              Grid.ColumnSpan="99"
              Placement="Center"
              Width="{Binding ActualWidth,
                              ElementName=WebBrowser1,
                              Mode=OneWay}"
              Height="{Binding ActualHeight, 
                               ElementName=WebBrowser1,
                               Mode=OneWay}"
              PlacementTarget="{Binding ElementName=WebBrowser1}"
              Opacity="0.5"
              Margin="3">
           <TextBlock Text="Loading ..."/>
       </Popup>
 </Grid>

One of these will surely work in your case.

like image 161
WPF-it Avatar answered Oct 06 '22 00:10

WPF-it


Unfortunately thats not possible with the WPF Webbrowser Control (which is basically a wrapped WinForms WebBrowser control), due to the order the OS renders WinForms and WPF content.

See also: Is there a way to render WPF controls on top of the wpf WebBrowser control?

There's a third party app Awsomium that should make it possible.

Edit: Another possibility would be to render a frameless window above the WebBrowser Control. But it's a bit tricky to keep it in the correct position/z-order.

like image 33
SvenG Avatar answered Oct 06 '22 01:10

SvenG


CefSharp provides a pure WPF browser contorl based on Chromium/V8 that isn't subject to the airspace issues of the Microsoft WebBrowser control (disclaimer: I am the maintainer of CefSharp).

like image 32
anthony Avatar answered Oct 06 '22 00:10

anthony