Мне нужно иметь представление вкладки новых версий IE в элементе управления WPF WebBrowser
.Как мне этого добиться?
Должен ли я использовать TabControl
и хост WebBrowser
в каждом элементе вкладки?Я подумал, что мог бы быть какой-то лучший способ иметь представление с вкладками в самом элементе управления WebBrowser
, потому что некоторые функции очень удобно управляются самим плагином IE, такие как опция «Открыть во вкладке», «Порядок перетаскивания и упорядочить вкладки»,открыть новую вкладку с URL-адресом по умолчанию и т. д.
Если я пойду по пути 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();
в конструкторе вашего окна.Все элементы управления WebBrowser
теперь будут включать опцию Open in Tab
, вызываемую правой кнопкой мыши \ wheel click \ Ctrl + Click.
Но это не будет содержать aTabControl в вашем элементе управления WebBrowser
.Опция открывает экземпляр браузера IE с соответствующей ссылкой, открытой как Tab.: (
Но, тем не менее, есть и другой способ. Мы можем знать о запросе просмотра с вкладками. Если пользователь пытается вызвать просмотр с вкладками, с помощью элемента управления WebBrowser
вызывается событие .Мы можем обработать это событие и на его основе создать новый TabItem
с другим элементом управления веб-браузера, который является частью WPF TabControl
, который обертывает наш предыдущий элемент управления веб-браузера.
Приветствия.
: -)