Вставить Firefox / Gecko в WPF / C # - PullRequest
       47

Вставить Firefox / Gecko в WPF / C #

8 голосов
/ 26 сентября 2011

Я хочу встроить текущий Gecko в мой WPF-проект. Я знаю, что есть возможность с Winforms-Host и Skybound-Gecko-Library.

Но я не использую стандартную wpf-тему для своего приложения. Это другое, и полоса прокрутки элемента управления не будет стилизована. Кроме того, это старая библиотека, разработанная для Firefox 3.

Какая библиотека / стратегия является лучшей для использования текущего Gecko в WPF?

Ответы [ 5 ]

8 голосов
/ 26 сентября 2011

Вам следует взглянуть на эти опции, все они используют Chromium:

оплачивается: (на основе Awesomium)

бесплатно: (на основе Chrome Embedded Framework)

5 голосов
/ 16 декабря 2016

Вы, вероятно, можете использовать WindowsFormsHost, учебное пособие здесь

https://nhabuiduc.wordpress.com/2014/09/18/geckofx-net-webbrowser-setup-and-features/

интересная часть

WindowsFormsHost host = new WindowsFormsHost(); 
GeckoWebBrowser browser = new GeckoWebBrowser(); 
host.Child = browser; 
gridWeb.Children.Add(host);
2 голосов
/ 05 октября 2011

WebKit.Net свободен: http://sourceforge.net/projects/webkitdotnet/

Их страница GitHub, кажется, была обновлена ​​совсем недавно: https://github.com/webkitdotnet

0 голосов
/ 10 сентября 2017

Это старый вопрос, но я придумал псевдо-решение для добавления GeckoFX в качестве тега XAML, например:

<local:GeckoBrowser Width="400" Height="250" />

Этого можно достичь, просто обернув все это в UserControl, например:

XAML:

<UserControl x:Class="WpfApp1.Browser"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:local="clr-namespace:WpfApp1"
    mc:Ignorable="d" 
    d:DesignHeight="300" d:DesignWidth="300">
    <Border x:Name="border" Background="Black" Margin="0"></Border>  
</UserControl>

C #:

public partial class Browser : UserControl
{
    WindowsFormsHost host = new WindowsFormsHost();
    GeckoWebBrowser browser = new GeckoWebBrowser();

    public Browser()
    {
        InitializeComponent();
        Xpcom.Initialize("Firefox");
        browser.Navigate("http://www.google.com");
        host.Child = browser;
        border.Child = host;
    }
}

Теперь вы можете использовать тег в WPF в том же проекте, где существует UserControl.

Я пытался заставить это работать как элемент управления в библиотеке, поэтому я могу легко перенести его на любой другой проект / решение, но оно продолжает выдавать мне ошибку об отсутствии mozglue.dll. Я подозреваю, что это связано с Xpcom.Initialize ("Firefox"), но мне нужно продолжить расследование.

0 голосов
/ 03 июня 2017

Вот мой ответ.По словам Романа, Gecko основан на Winforms, а не на WPF и поэтому должен быть включен через WindowsFormsHost.

  1. После создания проекта Visual Studio установите пакет Gecko через NuGet, используя команду: Install-Package Geckofx45

  2. Убедитесь, что ссылки WindowsFormsIntegration и System.Windows.Forms были добавлены в ваш проект.

  3. В диспетчере конфигурации установите 32-разрядную конфигурацию, чтобы избавиться от предупреждений компилятора.

  4. Обновите элемент 'Grid' MainWindow.xaml, указав ему имя и обработчик.для события «Loaded»

<Grid
    Name="GridWeb"
    Loaded="Window_Loaded">     
</Grid>

Измените файл MainWindow.xaml.cs, чтобы включить в него Gecko, а также заставить его перейти на страницу при загрузке:

  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");
  }

Я борюсь с использованием редактора кода SOтак что для более подробных объяснений и скриншотов, смотрите эту страницу блога .

...