Some instructions on how to incorporate the Gecko (Firefox) web browser, which is WinForms-based, for use within your WPF / XAML based C# project.
A similar post can be found here, whereby I use the MVVM-based approach:
https://www.technical-recipes.com/2017/using-the-gecko-browser-using-mvvm
Step 1: Create a new WPF project
Step 2: Install Gecko via NuGet
In my example I install the Windows 32-bit version.
Select Tools > NuGet Package Manager > Package Manager Console
Run the following command:
Install-Package Geckofx45
Step 3: Add any other essential references
Right click your project folder and select Add References.
(Make sure that System.Windows.Forms is already installed.)
Select WindowsFormsIntegration as the reference to add:
Step 4: Set the configuration to 32 bit
As shown in the Configuration Manager screenshot below:
Step 5: Update the main View
In this example the
<Window x:Class="GeckoWpf.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:GeckoWpf" mc:Ignorable="d" Title="GeckoBrowser" Height="400" Width="600"> <Grid Name="GridWeb" Loaded="Window_Loaded"> </Grid> </Window>
Step 6: Modify the MainWindow view class
MainWindow.xaml.cs
using Gecko; using System.Windows; using System.Windows.Forms.Integration; namespace GeckoWpf { /// <summary> /// Interaction logic for MainWindow.xaml /// </summary> public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); Gecko.Xpcom.Initialize("Firefox"); } private void Window_Loaded(object sender, RoutedEventArgs e) { WindowsFormsHost host = new WindowsFormsHost(); GeckoWebBrowser browser = new GeckoWebBrowser(); host.Child = browser; GridWeb.Children.Add(host); browser.Navigate("http://www.google.com"); } } }
Step 7: Try it
The Gecko browser embedded into your XAML code should navigate to the Google home page on loading as shown:
Capturing ‘DocumentCompleted’ events
To capture the event that fires when the document has completed, just modify MainWindow.xaml.cs as follows:
MainWindow.xaml.cs
using System.Windows; using System.Windows.Forms.Integration; using Gecko; using Gecko.Events; namespace GeckoWpf { /// <summary> /// Interaction logic for MainWindow.xaml /// </summary> public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); Xpcom.Initialize("Firefox"); } private void Window_Loaded(object sender, RoutedEventArgs e) { var host = new WindowsFormsHost(); var browser = new GeckoWebBrowser(); browser.DocumentCompleted += OnDocumentCompleted; host.Child = browser; GridWeb.Children.Add(host); browser.Navigate("http://www.google.com"); } private void OnDocumentCompleted(object sender, GeckoDocumentCompletedEventArgs e) { // Do your 'on doc completed' stuff in here... } } }