【发布时间】:2011-09-28 05:48:24
【问题描述】:
我需要在 WPF WebBrowser 控件中拥有新 IE 版本的选项卡视图。我怎样才能实现它?
我是否必须在每个选项卡项中使用TabControl 和托管WebBrowser 控件?我认为可能有一些更好的方法可以在WebBrowser 控件本身中使用选项卡式视图,因为某些功能由 IE 插件本身非常方便地管理,例如“在选项卡中打开”选项、“拖动和排列选项卡顺序”、使用默认网址等打开新标签。
如果我采用TabControl 的方式,那么我将不得不重新创建所有这些功能。欢迎任何狂野的投入。 :-)
谢谢。
编辑
实现如何在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();
在你的窗口的构造器中。所有WebBrowser 控件现在都将启用Open in Tab 右键单击选项\ 滚轮单击\ Ctrl + 单击。
但这不会在您的 WebBrowser 控件中托管 aTabControl。该选项将打开 IE 浏览器实例,并将相关链接作为选项卡打开。 :(
但是还有另一种方法。我们可以知道标签式浏览请求。如果用户尝试调用选项卡式浏览,event 将由 WebBrowser 控件引发。我们可以处理此事件,并在此基础上创建一个新的 TabItem,其中包含另一个 Web 浏览器控件,它是 WPF TabControl 的一部分,它包装了我们以前的 Web 浏览器控件。
干杯。
:-)
【问题讨论】: