2016-12-03 2 views
0

Я работаю с RichEditBox, и я реализую некоторые параметры, позволяющие пользователю редактировать текст с некоторым форматированием.Как сохранить выделенный текст в WinRT/UWP 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 вручную установить цвет фона выбора, когда фокус теряется и получил, так как текст экспортируется/загружен как форматированный текст, и я не могу беспорядок пользовательские настройки. Мне нужен способ сделать это без фактического изменения форматированного текста.

Я отметил, что класс RichEditBox не является sealed, поэтому мне было интересно, можно ли переопределить какое-либо поведение или что-то сделать, чтобы исправить эту проблему, но я не знаю, с чего начать. Я знаю, что в WPF есть еще одно обходное решение для решения этой проблемы (например, удобное свойство просто сохранить выделение, когда фокус потерян), но этого нет в UWP.

У вас есть идеи по поводу того, как это сделать? Благодаря!

ответ

0

Оказывается, есть не легкий/встроенный способ для достижения этой цели, поэтому я использовал этот обходной путь:

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

Вызов метода Focus после установки PreventKeyboardDisplayOnProgrammaticFocus свойства делает текст снова выделен без показа виртуальная клавиатура снова.

Этот метод делает цвет подсветки «вспышкой» на долю секунды (после того, как управление теряет фокус, пока оно не получит его снова, в зависимости от того, как быстро вызывается метод Focus), но это не так раздражает, и он исправляет проблему на данный момент.

+0

Вот еще одно обходное решение: https://stackoverflow.com/questions/37524488/uwp-show-textbox-text-highlight-while-textbox-is-out-of-focus –

Смежные вопросы