2009-09-09 7 views
9

Nie rozumiem klasy TextCompositionEventArgs.WPF: Nie rozumiem klasy TextCompositionEventArgs

Są to elementy typu ciąg o nazwie ControlText, SystemText, Text. Następnie znajduje się pole TextConmposistion, które samo zawiera elementy ControlText, SystemText i Text oraz dodatkowo pola SystemCompositionText i 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; } 
} 

Oba elementy tekstu wydają się zawierać tekst wpisany za pomocą klawiatury, wszystkie pozostałe pola zawierają puste ciągi.

W jaki sposób te pola różnią się i do czego służą?

Odpowiedz

11

TextCompositionEventArgs radzi sobie ze zmianami podczas komponowania tekstu, więc ma wiele właściwości związanych z tekstem i co konkretnie się zmienia, a sposób ich użycia zależy od tego, jakie zdarzenia obsługujesz.

podstawowe rzeczy do zrozumienia:

  • Tekst: zawiera to, że rzeczywisty tekst, który spowodował zdarzenie - normalnie wpisany tekst użytkownika

  • SystemText: Zawiera systemowe zdarzenia tekstowe, czyli: jeśli trafisz Alt + Letter, zobaczysz tutaj wydarzenie. Zwykle są to naciśnięcia klawiszy, które nie wpłynęłyby na tekst w formancie jak pole tekstowe.

  • ControlText: To są zdarzenia kontrolne, tzn .: jeśli naciśniesz Ctrl + Letter, zobaczysz to tutaj. Podobne do SystemText.

Zwykle, jeśli szukasz tylko standardowych "tekstowych" wydarzeń, po prostu zajrzysz do właściwości "Tekst". Aby uzyskać szczegółowe informacje, patrz Input Overview.

+0

Czy wiesz, dlaczego ControlText, SystemText, Text są duplikowane/redundantne w klasie TextCompositionEventArgs? – codymanix

+0

Nie są. Na przykład ControlText to test, który ma miejsce po naciśnięciu CTRL. Te naciśnięcia klawiszy nie pojawią się w tekście. –

+0

Edytowałem moje pytanie i wstawiłem kod, abyś mógł zobaczyć, co mam na myśli z duplikatem/nadmiarowym. – codymanix