WebView2在ScrollViewer内按箭头键时失去焦点



我对WPF的WebView2有一个问题。在ScrollViewer中,WebView2在方向键按下时失去焦点。去除ScrollViewer,WebView2焦点工作正常,为什么?有办法解决吗?

WebView2中呈现html编辑器,但这不是问题的原因。

xaml

示例
<ScrollViewer>
<StackPanel>
<TextBox />
<TextBox />
<TextBox />
<TextBox />
<wpf:WebView2 x:Name="wb" Height="200" />
<TextBox />
<TextBox />
<TextBox />
</StackPanel>
</ScrollViewer>

规格:

  • 。net 4.5
  • Microsoft Edge WebView2 Runtime 100.0.1185.44

我在这里创建了一个测试项目

仔细看,这似乎是因为ScrollViewer的工作方式-箭头键是滚动事件。

一个解决方法是为PreviewKeyDown事件创建一个处理程序。如果您要将ScrollViewer的标记调整为如下所示:
<ScrollViewer  x:Name="scroller"  PreviewKeyDown="scroller_PreviewKeyDown">
<StackPanel>
<TextBox />
<TextBox />
<TextBox />
<TextBox />
<wpf:WebView2 x:Name="wb" Height="200" />
<TextBox />
<TextBox />
<TextBox />
</StackPanel>
</ScrollViewer>

你可以在后面的代码中这样做:

private void scroller_PreviewKeyDown(object sender, KeyRoutedEventArgs e)
{
if (e.Key == Windows.System.VirtualKey.Up || e.Key == Windows.System.VirtualKey.Down || e.Key == Windows.System.VirtualKey.Left || e.Key == Windows.System.VirtualKey.Right)
{
e.Handled = true;
}
}

这只是意味着你不能使用箭头滚动。

我有同样的问题,并通过继承滚动查看器和重写OnKeyDown(KeyEventArgs e)来解决它

像这样:

public class CustomScrollViewer:ScrollViewer
{
protected override void OnKeyDown(KeyEventArgs e)
{
if(!(e.OriginalSource is WebView2))
{
base.OnKeyDown(e);
}
}

相关内容

  • 没有找到相关文章

最新更新