2015-03-15 9 views
0

Согласно Microsoft Quickstart: adding text input and editing controls, я должен использовать RichEditBox, если я хочу предоставить какой-то форматированный текстовый редактор. К сожалению, они были настолько бережливы в примерах. Представленные примеры показывают, как загружать RTF-файлы для отображения. В нем ничего не говорится о том, как разрешить пользователю манипулировать документами. Например, я хочу добавить обычные кнопки форматирования, такие как B, I, чтобы пользователь мог изменить формат предстоящего/выделенного текста. Но что мне делать, чтобы обрабатывать ввод данных с клавиатуры программного обеспечения? Мое воображение состоит в том, что клавиатура обеспечивает «сырые» входы символов, и мне нужно правильно определять и применять стили.Как использовать RichEditBox для форматированного текста

При условии, что у меня есть способ реагировать на ввод пользователя, следующая проблема заключается в обновлении базового документа программно. Предположим, что я хочу изменить выбор пользователя на новый текст.

// Change selected text; let assume I magically get the text whose format I should update and add necessary RTF stuffs; for testing, can use 

String^ newText = "{\\rtf1\\ansi{\\fonttbl\\f0\\fswiss Helvetica;}\\f0\\par\n{\\b bold}\\par}"; 
mRichEditBox->Document->Selection->SetText(TextSetOptions::FormatRtf, newText); 

// After the above line, mRichEditBox loses focus & the keyboard is dismissed so I attempt to focus it programmatically & bring back the keyboard. 

Editor->Focus(Windows::UI::Xaml::FocusState::Keyboard); 

// By default, after SetText, the updated text will be selected, this will put the cursor after changed text; so user can continue adding text 

mRichEditBox->Document->Selection->Collapse(false); 

Позвольте временно простить раздражающий вопрос пользовательского интерфейса о том, что клавиатура будет вверх/вниз несколько раз: например. пользователь нажмет t, я делаю т полужирных с помощью приведенной выше коды, система закрыть клавиатуру автоматически, код возвращает его обратно, и поместите курсор после т, пользователь может нажать e, творю й смелых через выше кода, система автоматически отбрасывает клавиатуру, код возвращает ее и помещает курсор после e и т. д. Каждый раз, когда RichEditBox гаснет/фокусируется, экран мерцает из-за цвета фона изменений RichEditBox. Вы догадываетесь об истории. Но это возможно из-за того, что я временно использую кнопку для запуска изменения.

Более серьезная проблема - проблема фокусировки: иногда она возвращает клавиатуру, иногда это не так. И даже если он вернет клавиатуру, клавиатура перестанет функционировать: нажатие клавиш больше не вставляет тексты, как если бы клавиатура потеряла цель !? Хуже того: мой телефон перезапустится через несколько раз, выполняя эти программные замены!

Может ли кто-нибудь подтвердить это как существующую проблему с ОС или если есть что-то, что я могу сделать, чтобы исправить это?

ответ

0

Вам не нужно вставлять свой RTF в RichEditBox. В общем, вы будете делать это только при сохранении или восстановлении REB.

Чтобы изменить свойства символа выбора (например, цвет, полужирный, курсив и т. Д.), Получите выбранный диапазон и обновите его CharacterFormat. Новый текст, добавленный в этот диапазон, наследует его окружающий формат, так как пользователь продолжает печатать новый текст, будет автоматически следовать за предыдущим форматом. Приложение не должно пытаться вторгаться в открытие и закрытие InputPane.

Подробнее см. Сценарий 6 в Xaml text editing sample на MSDN. Вот быстрый просмотр:

void Scenario6::BoldButtonClick(Object^ sender, RoutedEventArgs^ e) 
{ 
    ITextSelection^ selectedText = editor->Document->Selection; 
    if (selectedText != nullptr) 
    { 
     ITextCharacterFormat^ charFormatting = selectedText->CharacterFormat; 
     charFormatting->Bold = FormatEffect::Toggle; 
     selectedText->CharacterFormat = charFormatting; 
    } 
} 
+0

Спасибо за ссылку. Похоже, что установка 'IsTabStop =" False "', как используется в примере, отключает автоматическое нефокусирование на 'RichEditBox' всякий раз, когда нажимается кнопка. Я попытался расширить пример с помощью Find/replace (добавить новый TextBox, кнопки «Найти далее», «Заменить» и использовать «editor-> Document-> Selection-> SetText (TextSetOptions :: None, replaceText'). отлично работает на моем ноутбуке Windows 8.1, но перезагружает мой телефон [предварительный просмотр Windows 10 Insider] после нескольких замен. Известна ли ошибка в Windows 10? –

+0

Можете ли вы помочь мне с этим http://stackoverflow.com/questions/29170757/disabling-auto-bring-other-controls-out-of-view-when-focus-on-richeditbox? –

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