2011-09-26 104 views
8

我想将当前的Gecko嵌入到我的WPF项目中。 我知道Winforms-Host和Skybound-Gecko-Library是可能的。在WPF/C中嵌入Firefox/Gecko#

但我不使用标准wpf主题为我的应用程序。这是另一个,控件的滚动条将不会被设置。此外,这是一个旧的图书馆,是专为Firefox 3而设计的。

哪个是最好的图书馆/策略使用WPF中的当前Gecko?

+0

是否必须是FF或者你只是想有一个正确的浏览器? – albertjan

+0

它不一定是ff,但会是最好的。像skybound gecko这样的功能类似于一堆功能(基本导航和鼠标移动事件来读取光标处的htmldom)。 IE浏览器是没办法,我 – 0xDEADBEEF

回答

8

你应该看看这些选项,它们都使用铬:

支付:(Awesomium为主)

免费:(铬基于嵌入式框架)

+4

问题是关于壁虎,没有的webkit /眨眼 –

+0

你是正确的,但在当时我给了这个答案有使用壁虎没有解决办法。而不是说我给了一个替代方案。 – albertjan

+0

我在回答之前询问了OP。 – albertjan

4

你或许可以使用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); 
+0

这是我看到的唯一答案,解决这个问题。从我收集的内容来看,Gecko不能用于'纯粹'的WPF。我很乐意在这方面予以纠正。您必须使用WPF WindowsFormsHost嵌入基于WinForms的Gecko浏览器。 – AndyUK

0

这里就是我的回答。正如Roman所说的,Gecko是基于Winforms的,而不是基于WPF的,所以必须通过WindowsFormsHost来合并。

  1. 创建Visual Studio项目后,通过安装在的NuGet包壁虎使用命令:安装,包装Geckofx45

  2. 确保WindowsFormsIntegration程序和System.Windows.Forms的引用都被添加到您的项目。

  3. 在配置管理器中,将您的配置设置为32位,以摆脱编译器警告。

  4. 更新主窗口。XAML '网格' 元素给它的名称和该处理程序的 '加载' 事件

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

  • 修改主窗口。 xaml.cs合并壁虎以及使其导航到加载页面:

    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代码编辑器,因此对于更详细的解释和截图,看到这个blog page

    0

    这是一个老问题,但我想出了一个伪解决方案GeckoFX添加为XAML标记,如:

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

    这可以通过简单地在用户控件这样的包装整个事情来完成为:

    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”),但我需要进一步调查。