018 Розміщення контролю net 2
Imports System.Windows.Forms.Integration
Тепер ми можемо розмістити всередині цього контейнера елемент WebBrowser:
Зверніть увагу, що тегу WebBrowser передує префікс "mcl" - той самий, який ми вказали як посилання на бібліотеку System.Windows.Forms, що підключається (див. малюнок вище). На цьому розміщення елемента Net 2.0 на формі WPF закінчується. Проте необхідно ще розібратися, як отримати доступ до цього контролю. Перейдіть в режим редагування VB-коду та додайте такий код у конструктор NEW():
Dim mc As System.Windows.Forms.WebBrowser = wfh.Child mc.Navigate("http://www.thevista.ru")
Ми створили певну змінну "mc" типу WebBrowser і надали їй як значення той елемент, який знаходиться всередині контейнера WindowsFormsHost. Цей спосіб дозволив нам другим рядком отримати керування над контролем. Запускаємо проект:Ми вирішили поставлене завдання. Проте є одне неприємне обмеження. Якщо ви спробуєте розмістити не-Avalon контроль на WPF-формі, до якої застосована властивість AllowsTransparency=True, то ваш контроль буде невидимий! Це питання широко обговорювалося на форумах MSDN і я привидю вам офіційну відповідь програмістів Microsoft. "Піксельна прозорість використовує зовсім іншу модель відображення, ніж Win32-код. Більше не існує системна подія WM_PAINT. Замість цього вікно верхнього рівня створює растрове зображення і відсилає його операційній системі для подальшого представлення на екрані. Child-вікна (залежні від головного) не потрапляють у це растрове зображення, тому й не відображаються на екрані.буде невидимим при використанні AllowsTransparency. Наприкінці хочу звернути вашу увагу на те, що це обмеження не є обмеженням WPF як бібліотеки, а є наслідком несумісності моделей малювання Win32 та Avalon.