Реализация AutomationPeer, поддерживающего текстовый шаблон с предложением словаря в пользовательском элементе управления XAML
Я пытаюсь изменить этот пример (TouchedTextBlock
в частности) для редактирования текста UserControl
, К сожалению, образец далеко не адекватен. Единственное, что она позволяет, - это то, что программная клавиатура появляется, когда пользователь нажимает на элемент управления: клавиатура не предлагает словарь в качестве пользовательских типов. Кроме того, это не иллюстрирует, как мой элемент управления должен получать и обрабатывать команды редактирования; например, если пользователь выбирает слово, предложенное клавиатурой, как мой элемент управления получает слово и добавляет его к тексту? Я добавил отладочный код для отслеживания вызовов методов, и кажется, что ни один из реализованных ITextProvider, IValueProvider и ITextRangeProvider не вызывается. Итак, мои вопросы:
1) Когда вызывается метод в вышеупомянутых интерфейсах? Кто-нибудь может объяснить рабочий процесс / взаимодействие механизма автоматизации пользовательского интерфейса?
Меня так смущают многие статьи на MSDN. Я понимаю, что клавиатура похожа на "клиент" (выполняется отдельно от приложения) в среде автоматизации пользовательского интерфейса и AutomationPeer
это как "сервер". Как-то в этом примере клиент клавиатуры вообще не взаимодействует с моим AutomationPeer
; он взаимодействует только со всем приложением посредством предоставления ключевых событий, в то время как он должен специально взаимодействовать с AutomationPeer
, Я ожидал бы следующий рабочий процесс:
- Пользователь нажимает на элемент управления
- Управление усилением фокуса путем вызова
Focus
- Получив фокус, фреймворк вызывает
OnCreateAutomationPeer
чтобы создать мою индивидуальную реализациюAutomationPeer
- Framework определяет шаблоны и тип управления, покажите программную клавиатуру, если
Text
образец обнаружен и текст не только для чтения - Что на самом деле происходит в примере: клавиатура, кажется, обеспечивает необработанные события клавиш для всего приложения. Что я ожидаю: клавиатура (удаленно) "вызывает" мой
AutomationPeer
методы, позволяющие пользователям вставлять символы и слова (и backspace, ввод, ...) для моего контроля.
2) Есть ли образец, иллюстрирующий, как предоставить предложение?
Пожалуйста, не предлагайте мне использовать встроенные элементы управления, такие как TextBox
или же RichEditBox
Я бы использовал их, если бы они подходили мне.