Управление веб-браузером в приложении WPF без проблем с воздушным пространством? - PullRequest
2 голосов
/ 15 декабря 2011

Я работаю над приложением WPF с веб-браузером в одном из представлений. Когда я запускаю приложение, оно работает нормально, но элемент управления веб-браузера находится поверх моего региона wpf. Я знаю, что это как-то связано с проблемой AirSpace. Есть ли какой-нибудь способ преодолеть это? Любая помощь будет оценена.

Спасибо

Ответы [ 4 ]

2 голосов
/ 06 ноября 2013

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

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

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

Найдите пример кода ниже,

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

FIX: Стандартное исправление заключается в том, что вы можете установить высоту веб-браузера на ноль, когда вы запускаете какой-либо другой контроль над ним, в зависимости от вашего сценария. Ниже приведен пример реализации.

В 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;
}
1 голос
/ 24 декабря 2018

Попробуйте проект AirspaceFixer от Chris84898.https://github.com/chris84948/AirspaceFixer

Вы просто размещаете проблемный элемент управления на панели, и он делает тяжелую работу за вас.

XAML:

    <asf:AirspacePanel x:Name="ap"
                       FixAirspace="{Binding FixAirspace}"
                       Grid.Column="0" Grid.Row="1" >
        <WebBrowser x:Name="browser" Navigated="Browser_Navigated" />
    </asf:AirspacePanel>

Для временного "FixAirspace"в коде (или через изменения свойства зависимостей):

        ap.FixAirspace = true;

        // Display a dialog or whatever

        ap.FixAirspace = false;

Для него также есть пакет NuGet.

1 голос
/ 15 декабря 2011

Это известные проблемы, как посты Neeraj. Но с WPF 4.5 это кажется решенным, поэтому, если вы не возражаете против использования бета-версии, вам следует загрузить Visual Studio 11 .

...