【问题标题】:WebView2 lose focus at arrow keys press inside ScrollViewerWebView2 在 ScrollViewer 中按下箭头键时失去焦点
【发布时间】:2022-12-17 17:26:03
【问题描述】:

我对 WebView2 有疑问WPF.在ScrollViewerWebView2里面按下箭头键失去焦点.删除ScrollViewerWebView2焦点工作正常,为什么?有办法解决这个问题吗?

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 运行时 100.0.1185.44

我创建了一个测试项目here

【问题讨论】:

  • 我认为当您使用箭头键时,ScrollViewer 会抢走焦点。它可能必须 - 才能工作。

标签: c# .net wpf .net-4.5 webview2


【解决方案1】:

仔细观察,它看起来像是因为它是 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;
         }
     }

这只是意味着您将无法使用箭头进行滚动。

【讨论】:

  • 嗨,谢谢你的回答。这样e.Handled = true不允许使用箭头键更改文本框内光标的位置
  • @renzo:下定决心。按箭头键时要滚动还是要更改文本框中的行?它不能同时做这两件事。
  • @renzo - 这就是我在最后一句话中所说的;对于您的特定情况,我不确定 ScrollViewer 有哪些替代方案 - 但可能有一个不会抢走焦点的替代方案。
【解决方案2】:

我遇到了同样的问题并通过从滚动查看器继承并覆盖 OnKeyDown(KeyEventArgs e) 解决了它

是这样的:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多