Как изменить свойство полученного параметра arg перенаправленного события WPF перед возобновлением его распространения? - PullRequest
0 голосов
/ 25 августа 2011

Я играю с пользовательским 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, размещение инвертированного символа внутри и т. Д.), Но это не желаемое решение, поскольку оно обходит полностью проблема генерации / модификации маршрутизируемого события, которую я пытаюсь решить)

1 Ответ

0 голосов
/ 25 августа 2011

Вы не можете изменить данные события. События здесь, чтобы уведомить вас о том, что что-то произошло или происходит, и, возможно, позволить вам отменить / обработать это.

В вашем случае лучшее, что вы можете сделать, - пометить событие как Обработано , а затем добавить текст в текстовое поле самостоятельно.

Если вам нужен только заглавный сценарий, вы можете использовать свойство CharacterCasing , которое именно это и делает.

...