C# 如何使wpf webview像webbrowser一样滚动?

C# 如何使wpf webview像webbrowser一样滚动?,c#,wpf,webview,wpf-controls,webbrowser-control,C#,Wpf,Webview,Wpf Controls,Webbrowser Control,我试图在Wpf桌面应用程序中使用Microsoft.Toolkit.Wpf.UI.Controls.WebView控件。它似乎比webbrowser控件使用更少的资源,并且基于edge更为先进。但是,与webbrowser控件不同,除非选中,否则它不会滚动。i、 e.当鼠标在webbrowser上时,我可以不选择先上下滚动,但如果不是当前选定的控件,webview将忽略鼠标滚轮 下面的代码使用VS2019演示了该问题 <Window x:Class="test0.MainWindow"

我试图在Wpf桌面应用程序中使用
Microsoft.Toolkit.Wpf.UI.Controls.WebView
控件。它似乎比webbrowser控件使用更少的资源,并且基于edge更为先进。但是,与webbrowser控件不同,除非选中,否则它不会滚动。i、 e.当鼠标在webbrowser上时,我可以不选择先上下滚动,但如果不是当前选定的控件,webview将忽略鼠标滚轮

下面的代码使用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>

在运行时,当鼠标光标位于上方时,两个浏览器控件都将滚动。单击按钮(从任一浏览器中移除焦点)后,只有webbrowser控件在鼠标上方滚动

有没有解决办法


使用:.NET Framework 4.7.2和Microsoft.Toolkit.Wpf.UI.Controls.WebView 5.1.1

我创建了一个示例页面,并根据您的要求在答案中提供了代码。请查看现有代码,如果有任何疑问,请与我联系

<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是一个单视图网站,因此即使您可以直接在web浏览器上登录,搜索面板也无法滚动

编辑:


请按照要求检查您的windows版本和SDK

Windows版本:1809

SDK版本:17763

附加值:

AddInitializeScript

GotFocus


LostFocus

我已经阅读了您的查询,并试图找出一些问题。请检查您的windows和SDK版本

  • 您的windows版本必须高于或1809
  • 您的SDK版本必须具有以上或17763

如果有任何疑问或困惑,请告诉我。

我相信这就是您要找的

您需要为网格定义行定义,如下图所示,并将我假设的工具栏(带有“hello world”的工具栏)分配到网格行0中,将web浏览器分配到网格行1中,而不是在此场景中使用堆栈面板(请参见下面的代码)

让我知道这是否有帮助,或者如果你需要做一点不同的事情,我相信我可以帮助你解决这个问题


问题已解决!但与VS或框架版本等无关。在某些情况下,touchpad驱动程序似乎不能很好地使用webview控件。我疏忽了,没有提到我使用的是触摸板还是真正的鼠标,但我从未想到会有什么不同。直到我插上鼠标,没有问题

无论如何,解决方案是按照以下要求下载并安装precision touchpad驱动程序:

这解决了问题。。。直到windows决定将驱动程序“更新”回原来的驱动程序。阻止windows执行此操作的唯一方法是禁用“自动驱动程序下载”,如下所示:


我希望我提到我使用的是触摸板,因为我怀疑对于那些不使用精密触摸板驱动程序的人来说,这个问题可能更容易重现。

这对我来说很奇怪。您使用的是什么版本的framework和toolkit?@Tronald framework 4.7.2和toolkit 5.1.1您确定它适合您吗?最初,两个控件都将滚动而不选择,但单击按钮后,只有webbrowser将滚动。除非首先单击鼠标滚轮,否则Webview会忽略它。我只是用匹配的版本尝试了一下,但它仍然适用于我(我还通过单击按钮确认我失去了焦点)。真奇怪。你认为这可能是一个边缘问题吗?也许某些版本的Edge不关注鼠标悬停。我使用的是最新版本的Edge,它在鼠标悬停时可以很好地滚动。只有webview没有。事实上,如果我在UWP应用程序中使用webview,它会工作。只是在WPF应用程序中使用webview失败了。至少对我来说。我也无法重现这个问题,在我这边似乎效果很好!不起作用。顺便说一句,无论使用哪个网站作为源,缺少滚动都是一样的。请您根据要求检查您的windows版本和SDK。windows 10(1903)版本:10.0.18362在UWP应用程序中运行良好。只是不在wpf中。Windows和SDK版本高于最低版本:Windows 10 1903 SDK(10.0.18362.0)。我还想指出,我自己也运行了这个,它工作了。仍然不工作。也许是我的synaptics鼠标驱动程序中的奇怪的不明错误。。。还有一件事,如果我点击webbrowser,我仍然可以在webview上滚动鼠标。只有当我点击任何其他控件时,webview才会忽略鼠标滚轮。是的,那里似乎发生了一些奇怪的事情。如果您有可用的鼠标,您可以通过尝试另一个鼠标来排除鼠标驱动程序。我也查看了其他回答过的人的代码,它也为我运行。有很多事情需要排除。确保一切都是最新的,VS2019,SDK正在使用中等。我正在尝试复制您现在描述的条件。我认为伊珊·帕特尔在关注这个想法。我希望使用网格也能对布局有所帮助。我在第一次加载时就注意到了这个问题。我确认我的VS 2019是最新的,这里有相关的输出供您比较版本。它在我的电脑上运行良好,我也不能让它复制这个错误。我试着切换鼠标,摆弄tab按钮,看看是否能搞乱元素的焦点。我提供的代码没有问题。你把老鼠也养大了,让我觉得这是值得排除的。你还试过其他没有在帖子上列出的东西吗
<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>