Я играю с пользовательским TextBox, унаследованным от WPF TextBox, пытаюсь узнать о событиях WPF, поэтому моя проблема заключается в следующем: Когда TextBox получает ввод, я хочу, чтобы он вместо этого получал инвертированный регистр версия этого ввода . Например, если я наберу на клавише (строчные буквы) «а», я хочу, чтобы TextBox печатал (прописные) «А» вместо (строчные) «а».
Мое (частичное) решение состоит в том, чтобы в моем пользовательском TextBox перехватить событие TextInput путем перегрузки метода OnPreviewTextInput
. Когда вызывается этот метод, я получаю TextCompositionEventArgs
, у которого Text
свойство равно "a".
Таким образом, мой первый рефлекс должен был бы обновить это свойство Text до «A», как показано в следующем коде:
protected override void OnPreviewTextInput(TextCompositionEventArgs e)
{
e.Text = "A" ;
base.OnPreviewTextInput(e) ;
}
Проблема в том, что e.Text доступен только для чтения, и что я не нашел простого способа сделать это (и я искал, и я настроил как TextComposition
, так и TextCompositionEventArgs
, пытаясь построить его с нуля, копируя данные и т. Д.).
Я что-то упустил очевидное?
Есть ли способ сделать это?
PS: Другое решение состояло в том, чтобы использовать интерфейс WPF TextBox для настройки результата (извлечение текущего свойства .Text, размещение инвертированного символа внутри и т. Д.), Но это не желаемое решение, поскольку оно обходит полностью проблема генерации / модификации маршрутизируемого события, которую я пытаюсь решить)