В приложении WPF
(ориентированном на ядро .NET 3.1) в одном из окон у меня есть ScrollViewer
, а внутри ScrollViewer (среди других элементов) я разместил пользовательский элемент управления UWP
, который содержит RichEditBox
. Я добавил этот пользовательский элемент управления UWP через XamlHosts
:
<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>
RichEditBox в стиле UWP отображается в приложении WPF, я могу вводить текст, перемещать курсор с помощью кнопок со стрелками, но некоторые ключевые события не работают. Например, я не могу использовать кнопки Home / End для перехода к началу или концу строки в RichEditBox.
Проблема в том, что ScrollViewer в приложении WPF улавливает эти нажатия кнопок (Home / End / Ctrl + Right-Left) и не распространяется на элемент управления RichEditBox Xaml Island. Я знаю это, потому что, если я удалю ScrollViewer, проблема исчезнет.
Я пытался установить Focusable="False"
и IsTabStop="False"
для ScrollViewer, но не помогло. Я могу поймать эти события клавиатуры в WPF, но в элементе управления XamlIsland UWP события вообще не запускаются, когда я нажимаю кнопки «Домой» или «Конец» (ни KeyDownEvent
, ни PreviewKeyDownEvent
). Для остальных ключей они увольняются.
Могу ли я как-то запретить ScrollViewer перехватывать события клавиатуры? Или я могу как-то вызвать событие клавиатуры в UWP RichEditBox, когда я поймаю их в WPF?