Как сделать wpf прокрутки как веб-браузер? - PullRequest
5 голосов
/ 07 ноября 2019

Я пытаюсь использовать элемент управления Microsoft.Toolkit.Wpf.UI.Controls.WebView в настольном приложении wpf. Кажется, он использует значительно меньше ресурсов, чем элемент управления веб-браузера, и он гораздо более современный, основанный на преимуществах. Однако, в отличие от элемента управления веб-браузера, он не будет прокручиваться, если не выбран. т.е. когда мышь находится над веб-браузером, я могу прокручивать вверх и вниз без предварительного выбора, но веб-просмотр игнорирует колесо мыши, если оно не является текущим выбранным элементом управления.

При использовании VS2019 следующий код демонстрирует проблему.

<Window x:Class="test0.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:WPF="clr-namespace:Microsoft.Toolkit.Wpf.UI.Controls;assembly=Microsoft.Toolkit.Wpf.UI.Controls.WebView"
        Title="MainWindow" Height="600" Width="1024">

    <Grid>
        <StackPanel>
            <Button Content="hello world" Height="100" />
            <WPF:WebView Source="https://bing.com" Height="250" />
            <WebBrowser Source="https://bing.com" Height="250" />
        </StackPanel>
     </Grid>

</Window>

При запуске оба элемента управления браузером будут прокручиваться, когда курсор мыши находится над. После нажатия кнопки (удаления фокуса из любого из браузеров) при наведении курсора прокручивается только элемент управления веб-браузера.

Есть ли обходной путь, чтобы это исправить?

Использование: .NET Framework 4.7. 2 и Microsoft.Toolkit.Wpf.UI.Controls.WebView 5.1.1

Ответы [ 4 ]

2 голосов
/ 14 ноября 2019

Проблема решена! Но ничего общего с VS или версиями фреймворка и т. Д. Кажется, что драйвер сенсорной панели при некоторых обстоятельствах не очень хорошо работает с элементом управления webview. С моей стороны было упущением не упомянуть, что я использовал сенсорную панель против настоящей мыши, но мне никогда не приходило в голову, что будет какая-то разница. Пока я не подключил мышь, и проблем не было.

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

https://www.windowscentral.com/how-enable-precision-touchpad-drivers

Что решилопроблема ... Пока windows решила "обновить" драйвер обратно на старый. Единственный способ остановить это, это отключить «Автоматическую загрузку драйверов» в соответствии с:

https://www.laptopmag.com/articles/disable-automatic-driver-downloads-on-windows-10

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

1 голос
/ 13 ноября 2019

Я верю, что это то, что вы ищете.

Вы захотите определить определения строк для своей таблицы, как вы видите ниже, и назначить то, что я предполагаю, будет вашей панелью инструментов с "hello world" в строке сетки 0 и вашим веб-браузером в строке сетки 1вместо использования панели стека в этом сценарии (см. код ниже).

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

Определения строк сетки - Документы Microsoft

<Window x:Class="WpfApp1.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:WPF="clr-namespace:Microsoft.Toolkit.Wpf.UI.Controls;assembly=Microsoft.Toolkit.Wpf.UI.Controls.WebView"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApp1"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800" WindowState="Maximized">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto" />
            <RowDefinition Height="*" />
            <RowDefinition Height="*" />
        </Grid.RowDefinitions>
        <Button Content="hello world" Height="100" Grid.Row="0"/>
        <WebBrowser Source="https://bing.com" Grid.Row="1"/>
        <WPF:WebView Source="https://bing.com" Grid.Row="2"/>
    </Grid>
</Window>
0 голосов
/ 12 ноября 2019

Я прочитал ваш запрос и попытался выяснить некоторые проблемы. Пожалуйста, проверьте версию Windows и SDK ЗДЕСЬ .

  • Ваша версия Windows должна иметь версию выше или 1809
  • Ваша версия SDK должна иметь версию вышеили 17763

Пожалуйста, дайте мне знать в случае каких-либо сомнений или путаницы.

0 голосов
/ 11 ноября 2019

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

<Window x:Class="WpfApp1.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"
    xmlns:WPF="clr-namespace:Microsoft.Toolkit.Wpf.UI.Controls;assembly=Microsoft.Toolkit.Wpf.UI.Controls.WebView"
    xmlns:local="clr-namespace:WpfApp1"
    mc:Ignorable="d"
    Title="MainWindow" Height="720" Width="1280">
<Grid>
    <StackPanel>
        <Button Content="hello world" Height="100" />
        <!--<WPF:WebView Source="https://docs.microsoft.com/en-us/dotnet/csharp/whats-new/csharp-8" Height="250" />-->
        <WPF:WebView Source="https://bing.com" Height="250" />
        <WebBrowser Source="https://bing.com" Height="250"/>
    </StackPanel>
</Grid>

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

Изменить:

Можете ли вы проверитьВаша версия Windows и SDK в соответствии с требованиями

https://docs.microsoft.com/en-us/uwp/api/windows.web.ui.interop.webviewcontrol

Версия Windows: 1809

Версия SDK: 17763

Дополнительные значения:

AddInitializeScript

GotFocus

LostFocus

...