如何在 WinRT/UWP RichEditBox 失去焦点时保持突出显示的文本?

How to keep highlighted text in WinRT/UWP RichEditBox on focus lost?

我正在使用 RichEditBox 并且我正在实施一些选项来让用户编辑具有某种格式的文本。

问题是每次控件 失去焦点 时,突出显示的选择被隐藏,即使选择 保持活动状态 并且我实际上可以解决它。

这是我正在使用的 Template,如您所见,我已经删除了所有 VisualState,但这并没有解决问题。

<Style TargetType="RichEditBox" x:Key="CustomRtfEditBoxStyle">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="RichEditBox">
                <Grid>
                    <VisualStateManager.VisualStateGroups>
                        <VisualStateGroup x:Name="CommonStates">
                            <VisualState x:Name="Disabled" />
                            <VisualState x:Name="Normal" />
                            <VisualState x:Name="PointerOver" />
                            <VisualState x:Name="Focused" />
                            <VisualState x:Name="UnFocused" />
                        </VisualStateGroup>
                    </VisualStateManager.VisualStateGroups>
                ...

现在,我想这不是问题所在,选择是在控件内部代码的某处进行管理的。

注意:不能实际使用workaround手动设置焦点时的选区背景色失去和获得,因为文本是 exported/loaded 作为富文本,我不能弄乱用户设置。我需要一种无需实际更改格式化文本即可执行此操作的方法。

我注意到 RichEditBox class 不是 sealed,所以我想知道是否可以覆盖某些行为或做一些事情来解决这个问题,但我不会不知道从哪里开始。 我知道在 WPF 上有一些其他解决方法可以解决这个问题(比如方便的 属性 在焦点丢失时保持突出显示),但 UWP 上没有。

你知道怎么做吗?谢谢!

原来没有 easy/built-in 方法来完成这个,所以我使用了这个解决方法:

EditBox.PreventKeyboardDisplayOnProgrammaticFocus = true;
EditBox.Focus(FocusState.Programmatic);

设置PreventKeyboardDisplayOnProgrammaticFocus后调用Focus方法属性使文本再次高亮显示,而不会再次显示虚拟键盘。

此方法使高亮颜色 "flash" 持续几分之一秒(控件失去焦点后,直到它再次获得焦点,具体取决于 Focus 方法的调用速度),但这并没有那么烦人,它暂时解决了这个问题。