我想将当前的Gecko嵌入到我的WPF项目中。 我知道Winforms-Host和Skybound-Gecko-Library是可能的。在WPF/C中嵌入Firefox/Gecko#
但我不使用标准wpf主题为我的应用程序。这是另一个,控件的滚动条将不会被设置。此外,这是一个旧的图书馆,是专为Firefox 3而设计的。
哪个是最好的图书馆/策略使用WPF中的当前Gecko?
我想将当前的Gecko嵌入到我的WPF项目中。 我知道Winforms-Host和Skybound-Gecko-Library是可能的。在WPF/C中嵌入Firefox/Gecko#
但我不使用标准wpf主题为我的应用程序。这是另一个,控件的滚动条将不会被设置。此外,这是一个旧的图书馆,是专为Firefox 3而设计的。
哪个是最好的图书馆/策略使用WPF中的当前Gecko?
你应该看看这些选项,它们都使用铬:
支付:(Awesomium为主)
免费:(铬基于嵌入式框架)
WebKit.Net是自由的: http://sourceforge.net/projects/webkitdotnet/
他们GitHub的页面似乎已被更多最近更新:https://github.com/webkitdotnet
你或许可以使用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);
这是我看到的唯一答案,解决这个问题。从我收集的内容来看,Gecko不能用于'纯粹'的WPF。我很乐意在这方面予以纠正。您必须使用WPF WindowsFormsHost嵌入基于WinForms的Gecko浏览器。 – AndyUK
这里就是我的回答。正如Roman所说的,Gecko是基于Winforms的,而不是基于WPF的,所以必须通过WindowsFormsHost来合并。
创建Visual Studio项目后,通过安装在的NuGet包壁虎使用命令:安装,包装Geckofx45
确保WindowsFormsIntegration程序和System.Windows.Forms的引用都被添加到您的项目。
在配置管理器中,将您的配置设置为32位,以摆脱编译器警告。
更新主窗口。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。
这是一个老问题,但我想出了一个伪解决方案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”),但我需要进一步调查。
是否必须是FF或者你只是想有一个正确的浏览器? – albertjan
它不一定是ff,但会是最好的。像skybound gecko这样的功能类似于一堆功能(基本导航和鼠标移动事件来读取光标处的htmldom)。 IE浏览器是没办法,我 – 0xDEADBEEF