WPF: я не понимаю класс TextCompositionEventArgs - PullRequest
9 голосов
/ 10 сентября 2009

Я не понимаю класс 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 содержат текст, набранный с клавиатуры, все остальные поля содержат пустые строки.

Чем отличаются эти поля и для чего они нужны?

1 Ответ

11 голосов
/ 10 сентября 2009

TextCompositionEventArgs имеет дело с изменениями при составлении текста, поэтому у него много свойств, касающихся текста и того, что конкретно меняется, и то, как вы его используете, зависит от того, какие события вы обрабатываете.

Основные вещи, чтобы понять:

  • Текст: содержит фактический текст, вызвавший событие - обычно набираемый пользователем текст

  • SystemText: содержит системные текстовые события, т. Е. Если вы нажмете Alt + буква, вы увидите событие здесь. Обычно это нажатия клавиш, которые не влияют на текст в элементе управления, например на текстовое поле.

  • ControlText: это текстовые события управления, то есть: если вы нажмете Ctrl + буква, вы увидите это здесь. Аналогично SystemText.

Обычно, если вы просто ищете стандартные «текстовые» события, вам просто нужно взглянуть на свойство «Текст». Подробнее см. Обзор ввода .

...