Согласно 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. Вы догадываетесь об истории. Но это возможно из-за того, что я временно использую кнопку для запуска изменения.
Более серьезная проблема - проблема фокусировки: иногда она возвращает клавиатуру, иногда это не так. И даже если он вернет клавиатуру, клавиатура перестанет функционировать: нажатие клавиш больше не вставляет тексты, как если бы клавиатура потеряла цель !? Хуже того: мой телефон перезапустится через несколько раз, выполняя эти программные замены!
Может ли кто-нибудь подтвердить это как существующую проблему с ОС или если есть что-то, что я могу сделать, чтобы исправить это?
Спасибо за ссылку. Похоже, что установка 'IsTabStop =" False "', как используется в примере, отключает автоматическое нефокусирование на 'RichEditBox' всякий раз, когда нажимается кнопка. Я попытался расширить пример с помощью Find/replace (добавить новый TextBox, кнопки «Найти далее», «Заменить» и использовать «editor-> Document-> Selection-> SetText (TextSetOptions :: None, replaceText'). отлично работает на моем ноутбуке Windows 8.1, но перезагружает мой телефон [предварительный просмотр Windows 10 Insider] после нескольких замен. Известна ли ошибка в Windows 10? –
Можете ли вы помочь мне с этим http://stackoverflow.com/questions/29170757/disabling-auto-bring-other-controls-out-of-view-when-focus-on-richeditbox? –