我需要在WPF WebBrowser
控件中有新IE版本的选项卡视图。我怎样才能实现它?
我是否必须在每个标签项中使用TabControl
和托管WebBrowser
控件?我认为可以有一些更好的方法在WebBrowser
控件本身中使用选项卡式视图,因为IE插件本身可以非常方便地管理某些功能,例如“在选项卡中打开”选项,“拖放和排列选项卡顺序” “,打开带有默认网址等的新标签页
如果我采用TabControl
方式,那么我将不得不重新创建所有这些功能。欢迎任何狂野的投入。 : - )
THX。
修改
解决方案,以实现如何在WebBrowser
控件中启用“在标签中打开”右键单击选项。
using System;
using System.Runtime.InteropServices;
namespace TabbedBrowsing
{
public enum INTERNETFEATURELIST
{
FEATURE_OBJECT_CACHING = 0,
FEATURE_ZONE_ELEVATION = 1,
FEATURE_MIME_HANDLING = 2,
FEATURE_MIME_SNIFFING = 3,
FEATURE_WINDOW_RESTRICTIONS = 4,
FEATURE_WEBOC_POPUPMANAGEMENT = 5,
FEATURE_BEHAVIORS = 6,
FEATURE_DISABLE_MK_PROTOCOL = 7,
FEATURE_LOCALMACHINE_LOCKDOWN = 8,
FEATURE_SECURITYBAND = 9,
FEATURE_RESTRICT_ACTIVEXINSTALL = 10,
FEATURE_VALIDATE_NAVIGATE_URL = 11,
FEATURE_RESTRICT_FILEDOWNLOAD = 12,
FEATURE_ADDON_MANAGEMENT = 13,
FEATURE_PROTOCOL_LOCKDOWN = 14,
FEATURE_HTTP_USERNAME_PASSWORD_DISABLE = 15,
FEATURE_SAFE_BINDTOOBJECT = 16,
FEATURE_UNC_SAVEDFILECHECK = 17,
FEATURE_GET_URL_DOM_FILEPATH_UNENCODED = 18,
FEATURE_TABBED_BROWSING = 19,
FEATURE_SSLUX = 20,
FEATURE_DISABLE_NAVIGATION_SOUNDS = 21,
FEATURE_DISABLE_LEGACY_COMPRESSION = 22,
FEATURE_FORCE_ADDR_AND_STATUS = 23,
FEATURE_XMLHTTP = 24,
FEATURE_DISABLE_TELNET_PROTOCOL = 25,
FEATURE_FEEDS = 26,
FEATURE_BLOCK_INPUT_PROMPTS = 27,
FEATURE_ENTRY_COUNT = 28
}
public enum DWFLAGS
{
SET_FEATURE_ON_THREAD = 0x00000001,
SET_FEATURE_ON_PROCESS = 0x00000002,
SET_FEATURE_IN_REGISTRY = 0x00000004,
SET_FEATURE_ON_THREAD_LOCALMACHINE = 0x00000008,
SET_FEATURE_ON_THREAD_INTRANET = 0x00000010,
SET_FEATURE_ON_THREAD_TRUSTED = 0x00000020,
SET_FEATURE_ON_THREAD_INTERNET = 0x00000040,
SET_FEATURE_ON_THREAD_RESTRICTED = 0x00000080
}
public static class IEFeatureSetBehavior
{
[DllImport("urlmon.DLL")]
public static extern Int32 CoInternetSetFeatureEnabled(INTERNETFEATURELIST featureEntry, Int32 dwFlags, bool fEnable);
[DllImport("urlmon.DLL")]
public static extern Int32 CoInternetIsFeatureEnabled(INTERNETFEATURELIST featureEntry, Int32 dwFlags);
public static void EnabledTabbedBrowsing()
{
var lr = 0;
var featureToEnable = INTERNETFEATURELIST.FEATURE_TABBED_BROWSING;
if (CoInternetSetFeatureEnabled(featureToEnable, (Int32)DWFLAGS.SET_FEATURE_ON_PROCESS, true) == 0)
{
if (CoInternetIsFeatureEnabled(featureToEnable, (Int32)DWFLAGS.SET_FEATURE_ON_PROCESS) != 0)
{
lr = 2;
}
else
{
lr = 1;
}
}
}
}
}
我们只需要调用
IEFeatureSetBehavior.EnabledTabbedBrowsing();
在你的Window的constrcutor中。现在,所有WebBrowser
控件都会启用Open in Tab
右键单击选项\滚轮点击\ Ctrl +单击。
但是这不会在WebBrowser
控件中托管aTabControl。该选项打开IE浏览器实例,并将相关链接作为Tab打开。 :(
但是还有另一种方式。我们可以知道标签式浏览请求。如果用户尝试调用选项卡式浏览,则WebBrowser
控件会引发event。我们可以处理此事件,并在此基础上创建一个新的TabItem
,其中包含另一个Web浏览器控件,它是包含我们之前Web浏览器控件的WPF TabControl
的一部分。
干杯。
: - )
答案 0 :(得分:1)
您建议的方式(将WebBrowser
控件放入TabControl
)可能与它一样好。
有人说,由于WebBrowser控件非常有限,你仍然会很快进入墙壁。所有你可以用它来低音处理,打开一个URL并滚动并单击它。如果要提供“在新选项卡中打开”等上下文菜单操作,则不会获得所需的DOM API。
也有人说,你可能想看看Awsomium这是一个更复杂的网页浏览器控件,但不幸的是might not be free for you。
答案 1 :(得分:1)