如何使 wpf webview 像 webbrowser 一样滚动?
how to make wpf webview scroll like webbrowser?
我正在尝试在 wpf 桌面应用程序中使用 Microsoft.Toolkit.Wpf.UI.Controls.WebView
控件。它似乎比 webbrowser 控件使用更少的资源,并且更新得多,基于边缘。然而,与网络浏览器控件不同的是,除非被选中,否则它不会滚动。即,当鼠标悬停在 web 浏览器上时,我可以上下滚动而无需先选择,但如果它不是当前选定的控件,则 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 是一个单视图站点,因此即使您可以直接在网络浏览器上签入,搜索面板也无法滚动。
编辑:
能否请您根据要求检查您的windows版本和SDK
https://docs.microsoft.com/en-us/uwp/api/windows.web.ui.interop.webviewcontrol
Windows版本:1809
SDK版本:17763
附加值:
AddInitializeScript
GotFocus
LostFocus
我已阅读您的查询并尝试找出一些问题。请检查您的 windows 和 SDK 版本 HERE.
- 您的 windows 版本必须高于或 1809
- 您的SDK版本必须在以上或17763
如有任何疑问或困惑,请告诉我。
我相信这就是您要找的。
您需要为您的网格定义行定义,如下所示,并将我假设将成为您的工具栏的 "hello world" 分配到网格行 0,将您的网络浏览器分配到网格行 1而不是在这种情况下使用堆栈面板(请参阅下面的代码)。
让我知道这是否有帮助,或者如果您需要以不同的方式完成它,我相信我可以帮助您解决这个问题。
Grid Row Definitions - Microsoft Docs
<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>
问题解决了!但与 VS 或框架版本等无关。在某些情况下,触摸板驱动程序似乎无法与 webview 控件配合使用。这是我的疏忽,更不用说我使用的是触摸板和真正的鼠标,但我从来没有想过会有什么不同。直到我插上鼠标才没有问题。
无论如何,解决方案是按照以下方式下载并安装精密触摸板驱动程序:
https://www.windowscentral.com/how-enable-precision-touchpad-drivers
问题解决了...直到windows决定"update"驱动程序回到原来的那个。停止 windows 这样做的唯一方法是按照以下方式禁用 "Automatic driver downloads":
https://www.laptopmag.com/articles/disable-automatic-driver-downloads-on-windows-10
我希望我提到我使用的是触摸板,因为我怀疑对于那些没有使用精密触摸板驱动程序的人来说,这个问题可能更容易重现。
我正在尝试在 wpf 桌面应用程序中使用 Microsoft.Toolkit.Wpf.UI.Controls.WebView
控件。它似乎比 webbrowser 控件使用更少的资源,并且更新得多,基于边缘。然而,与网络浏览器控件不同的是,除非被选中,否则它不会滚动。即,当鼠标悬停在 web 浏览器上时,我可以上下滚动而无需先选择,但如果它不是当前选定的控件,则 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 是一个单视图站点,因此即使您可以直接在网络浏览器上签入,搜索面板也无法滚动。
编辑:
能否请您根据要求检查您的windows版本和SDK
https://docs.microsoft.com/en-us/uwp/api/windows.web.ui.interop.webviewcontrol
Windows版本:1809
SDK版本:17763
附加值:
AddInitializeScript
GotFocus
LostFocus
我已阅读您的查询并尝试找出一些问题。请检查您的 windows 和 SDK 版本 HERE.
- 您的 windows 版本必须高于或 1809
- 您的SDK版本必须在以上或17763
如有任何疑问或困惑,请告诉我。
我相信这就是您要找的。
您需要为您的网格定义行定义,如下所示,并将我假设将成为您的工具栏的 "hello world" 分配到网格行 0,将您的网络浏览器分配到网格行 1而不是在这种情况下使用堆栈面板(请参阅下面的代码)。
让我知道这是否有帮助,或者如果您需要以不同的方式完成它,我相信我可以帮助您解决这个问题。
Grid Row Definitions - Microsoft Docs
<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>
问题解决了!但与 VS 或框架版本等无关。在某些情况下,触摸板驱动程序似乎无法与 webview 控件配合使用。这是我的疏忽,更不用说我使用的是触摸板和真正的鼠标,但我从来没有想过会有什么不同。直到我插上鼠标才没有问题。
无论如何,解决方案是按照以下方式下载并安装精密触摸板驱动程序:
https://www.windowscentral.com/how-enable-precision-touchpad-drivers
问题解决了...直到windows决定"update"驱动程序回到原来的那个。停止 windows 这样做的唯一方法是按照以下方式禁用 "Automatic driver downloads":
https://www.laptopmag.com/articles/disable-automatic-driver-downloads-on-windows-10
我希望我提到我使用的是触摸板,因为我怀疑对于那些没有使用精密触摸板驱动程序的人来说,这个问题可能更容易重现。