Using the Gecko web browser in WPF

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: [code language="txt"] Install-Package Geckofx45 [/code] 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 element is given the Name "GridWeb" and a handler for the "Loaded" event as shown: [code language="xml"] <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> [/code] Step 6: Modify the MainWindow view class MainWindow.xaml.cs [code language="csharp"] 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"); } } } [/code] 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 [code language="csharp"] 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... } } } [/code]

Comments

Popular posts from this blog

Using the Supervisor Controller Pattern to access View controls in MVVM

Getting started with client-server applications in C++

How to send an e-mail via Google SMTP using C#