WPF WebBrowser отключает события мыши для веб-страниц в браузере? - PullRequest
1 голос
/ 12 мая 2019

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

Я пытался размещать объекты каккнопка перед веб-страницей и установила ее непрозрачность 0, но события мыши по-прежнему проходили.

Я изменил свойство WebBrowser.IsEnabled на false, но снова содержимое браузера обнаруживает наведение мыши.

Есть ли способ получить желаемый результат?

1 Ответ

3 голосов
/ 12 мая 2019

Элемент управления WebBrowser не является обычным элементом управления wpf. Это хост ActiveX, который размещает браузер в новом окне, которое отображается в верхней части окна wpf. Это известно как «проблема воздушного пространства» Windows.

Вот почему установка свойства IsEnabled или размещение другого элемента управления поверх него не работает. Поскольку веб-браузер имеет свое собственное окно, единственный способ предотвратить ввод мышью на вашу веб-страницу - это запрет ввода мышью в окно браузера. Вы можете сделать это с помощью внешнего звонка на EnableWindow(IntPtr hWnd, bool enable).

Вот небольшой образец:

MainWindow.xaml:

<Window x:Class="Test.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    Title="MainWindow"
    Width="800"
    Height="450"
    mc:Ignorable="d">
    <Grid>
        <WebBrowser x:Name="Browser"/>
    </Grid>
</Window>

MainWindow.xaml.cs:

namespace Test
{
    static class Win32
    {
        [DllImport("user32.dll")]
        public static extern bool EnableWindow(IntPtr hWnd, bool enable);
    }

    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            Loaded += MainWindow_Loaded;
        }

        private void MainWindow_Loaded(object sender, RoutedEventArgs e)
        {
            Win32.EnableWindow(Browser.Handle, false);
        }
    }
}

Это отключит все вводы мыши и клавиатуры в окне браузера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...