我对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);
}
}