Я не понимаю класс TextCompositionEventArgs.
Есть члены типа string с именами ControlText, SystemText, Text. Затем есть поле TextConmposistion, которое снова содержит члены ControlText, SystemText и Text, а также поля SystemCompositionText и CompositionText.
public class TextCompositionEventArgs : InputEventArgs
{
..
public string ControlText { get; }
public string SystemText { get; }
public string Text { get; }
public TextComposition TextComposition { get; }
}
public class TextComposition : DispatcherObject
{
..
public string CompositionText { get; protected set; }
public string ControlText { get; protected set; }
public string SystemCompositionText { get; protected set; }
public string SystemText { get; protected set; }
public string Text { get; protected set; }
}
Кажется, что оба элемента Text содержат текст, набранный с клавиатуры, все остальные поля содержат пустые строки.
Чем отличаются эти поля и для чего они нужны?