2012-07-03 2 views
2

У меня есть изображение, которое необходимо разместить над WebBrowser. Проблема заключается не в том, что я делаю, изображение всегда заканчивается за элементом управления WebBrowser. Я не могу использовать Awesomium, настраиваемый элемент управления веб-браузером, который использует Chrome вместо IE ActiveX, поскольку Awesomium не может загружать файлы XBAP.Поместите изображение над ошибкой управления веб-браузером

Я смотрю почти везде, но я не могу найти правильное решение этой проблемы.

Как я могу отобразить изображение над элементом управления WPF WebBrowser?

ответ

1

Я подозреваю, что WPF WebBrowser реализован так же, как Silverlight и WinRT (также известный как Windows 8 Metro).

WebBrowser в Silverlight и WebView в WinRT/Metro всегда находятся на вершине в Z-порядке. По-видимому, это связано с использованием элемента управления Trident ActiveX. Для решения проблемы Z-заказа предусмотрены WebBrowserBrush и WebViewBrush.

К сожалению, это не похоже на то, что WPF предоставляет кисть для этой цели.

Поиск в Интернете, похоже, есть те, кто имел разную степень успеха, пытаясь имитировать поведение этой кисти. Однако это может не помочь вам, так как использование любой кисти устраняет интерактивность с визуализированным контентом.

+0

Вы гений ... но ... Можете ли вы указать мне в правильном направлении, возможно, веб-сайт или что-то подобное или ресурсов или в какой-то шанс на заказ веб-управления, кроме Awesomium, которая позволит мне сделать что-то вроде этого? –

+0

Я искал вокруг, и до сих пор я не нашел ничего, что было бы очень полезно. Я буду искать и обновлять, если найду что-нибудь. –

+0

Спасибо, человек за что до сих пор читал, что большинство людей рекомендует другим использовать всплывающие окна для наложения изображений, но это не для меня. –

1

WPF webbrowser не является REAL WPF Control, но использует некоторые HwndHost, чтобы показать некоторые плюсы IE. Это приводит к проблеме «Воздушное пространство WPF» (которая должна быть исправлена ​​с помощью .net 4.5). Единственная опция для отображения изображения над элементом управления веб-браузером - это поместить его в всплывающее окно над веб-браузером. Всплывающие окна имеют свой собственный Win32 Hwnd и поэтому имеют собственное «воздушное пространство».

просто сделать что-то вроде

<WebBrowser Name="web"> 
</WebBrowser> 
<Popup PlacementTarget="{Binding ElementName=web}" Placement="Center" IsOpen="true"> 
<Image Source="blub.png"/> 
</Popup> 
0

вопрос не был решен в WPF 4.5. На некоторых форумах была некоторая информация, такие, как приведенные ниже свойства, были доступны с 4,5 версией управления веб-браузером, однако план был удален. Поэтому вам необходимо самостоятельно решить проблему воздушного пространства.

WebBrowser.CompositionMode = System.Windows.Interop.CompositionMode.Full; WebBrowser.IsRedirected = true; 

Обходной, что вы могли бы сделать это, сделав высоту элемента управления веб-браузера к нулю, когда какой-либо другой контроль приходит перед управлением веб-браузера.

поиск пример кода,

Предположим, у вас есть контроль над веб-браузер в MainWindow. Когда вы выполняете какое-либо действие, например: нажмите кнопку, у вас есть другой пользовательский элемент управления, который выходит за пределы MainWindow. Однако из-за проблемы Airspace веб-браузер не сидит в своем родительском элементе управления и не входит в ваш контроль.

ИСПРАВЛЕНИЕ: стандартное исправление - вы можете установить высоту веб-браузера на ноль, когда вы запускаете какой-либо другой контроль над ним, зависит от вашего сценария. Ниже приведен пример реализации.

В MainWindow.Xaml включены события.

Activated="Window_Activated" 
Deactivated="Window_Deactivated" 

В Xaml.cs обрабатывается сценарий, задавая высоту.

private void Window_Activated(object sender, EventArgs e) 
{ 
    wb.Height = double.NaN; 
} 

private void Window_Deactivated(object sender, EventArgs e) 
{ 
    wb.Height = 0; 
} 
Смежные вопросы