如何将 Home/End 按钮按下传播到 WPF ScrollViewer 内的 UWP RichEditBox?

问题描述

在其中一个窗口上的 WPF 应用程序(针对 .NET core 3.1)中,我有一个 ScrollViewer 并且在 ScrollViewer(以及其他元素中)我放置了一个自定义 UWP控件,其中包含一个 RichEditBox。我通过 XamlHosts 添加了这个自定义 UWP 控件:

<Window xmlns:xaml="clr-namespace:Microsoft.Toolkit.Wpf.UI.XamlHost;assembly=Microsoft.Toolkit.Wpf.UI.XamlHost">
    ...
     <ScrollViewer>
        <Grid>
            ...
            <xaml:WindowsXamlHost InitialTypeName="UWPControls.MyRichBox" x:Name="UwpRichEditBox"/>
        </Grid>
    </ScrollViewer>
<Window>

UWP 样式的 RichEditBox 显示在 WPF 应用程序中,我可以输入文本,使用箭头按钮移动插入符号,但某些关键事件不起作用。例如,我无法使用 Home/End 按钮转到 RichEditBox 中一行的开头或结尾。

问题在于,WPF 应用程序中的 ScrollViewer 会捕获这些按钮按下(Home/End/Ctrl+Right-Left),并且它不会传播到 Xaml Island RichEditBox 控件。我知道这一点,因为如果我删除 ScrollViewer,问题就会消失。

我尝试为 ScrollViewer 设置 Focusable="False"IsTabStop="False",但没有帮助。我可以在 WPF 中捕获这些键盘事件,但在 XamlIsland UWP 控件中,当我按下 Home 或 End 按钮(也不是 KeyDownEvent,也不是 PreviewKeyDownEvent)时,根本不会触发这些事件。对于其他键,它们会被触发。

我能以某种方式阻止 ScrollViewer 捕捉键盘事件吗?或者,当我在 WPF 中捕捉到 UWP RichEditBox 上的键盘事件时,我可以以某种方式在它们上引发键盘事件吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)