我想在我的WPF项目中嵌入当前的Gecko。 我知道有Winforms-Host和Skybound-Gecko-Library的可能性。
但我没有在我的应用程序中使用标准的wpf-theme。它是另一个,控件的滚动条将不会被设置样式。此外,这是一个专为Firefox 3设计的旧库。
哪个是在WPF中使用当前Gecko的最佳库/策略?
答案 0 :(得分:8)
您应该看看这些选项,它们都使用Chromium:
付款:(基于Awesomium)
免费:(基于Chrome嵌入式框架版)
答案 1 :(得分:5)
你可以使用WindowsFormsHost,这里的教程
有趣的部分是
WindowsFormsHost host = new WindowsFormsHost();
GeckoWebBrowser browser = new GeckoWebBrowser();
host.Child = browser;
gridWeb.Children.Add(host);
答案 2 :(得分:2)
WebKit.Net是免费的:http://sourceforge.net/projects/webkitdotnet/
他们的GitHub页面似乎最近更新了:https://github.com/webkitdotnet
答案 3 :(得分:0)
这是我的答案。正如Roman所说,Gecko是基于Winforms的,而不是基于WPF的,所以必须通过WindowsFormsHost合并。
创建Visual Studio项目后,使用以下命令通过NuGet安装Gecko软件包:Install-Package Geckofx45
确保已将WindowsFormsIntegration和System.Windows.Forms引用添加到项目中。
在Configuration Manager中,将配置设置为32位,以消除编译器警告。
更新MainWindow.xaml'Gate'元素,为其提供名称和'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代码编辑器,因此有关详细说明和屏幕截图,请参阅此blog page。
答案 4 :(得分:0)
这是一个老问题,但我提出了一个伪解决方案,将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”),但我需要进一步调查。