Sdílet prostřednictvím


Vlastní textové zadání

Základní textová rozhraní API v oboru názvů Windows.UI.Text.Core umožňují aplikaci pro Windows přijímat textové vstupy z libovolné textové služby podporované na zařízeních s Windows. Rozhraní API jsou podobná rozhraním API architektury textových služeb v tom, že aplikace nemusí mít podrobné znalosti textových služeb. Aplikace tak může přijímat text v libovolném jazyce a z libovolného typu vstupu (například klávesnice, řeči nebo pera).

Důležitá rozhraní API: Windows.UI.Text.Core, CoreTextEditContext

Proč používat základní textová rozhraní API?

U mnoha aplikací stačí ovládací prvky textového pole XAML nebo HTML pro zadávání a úpravy textu. Pokud ale vaše aplikace zpracovává složité textové scénáře, jako je aplikace pro zpracování textu, budete možná potřebovat flexibilitu vlastního ovládacího prvku pro úpravy textu. Rozhraní API klávesnice CoreWindow můžete použít k vytvoření vašeho ovládacího prvku pro úpravy textu. Neposkytují však způsob, jak přijímat textové vstupy založené na složení, které jsou nutné pro podporu východoasijských jazyků.

Místo toho použijte rozhraní API Windows.UI.Text.Core , pokud potřebujete vytvořit vlastní ovládací prvek pro úpravy textu. Tato rozhraní API jsou navržená tak, aby poskytovala velkou flexibilitu při zpracování textového vstupu v libovolném jazyce a poskytovala prostředí pro text, které je pro vaši aplikaci nejvhodnější. Ovládací prvky textového zadávání a úprav vytvořené pomocí základních textových API rozhraní mohou přijímat textové vstupy ze všech existujících metod zadávání textu na zařízeních s Windows, od editorů vstupních metod (IMEs) vytvořených pomocí Text Services Framework a rukopisu na počítačích, až po klávesnici WordFlow (která poskytuje automatickou korekci, predikci a diktování) na mobilních zařízeních.

Architecture

Následuje jednoduchá reprezentace textového vstupního systému.

  • "Aplikace" představuje aplikaci pro Windows hostující vlastní ovládací prvek pro úpravy vytvořený pomocí základních textových rozhraní API.
  • Rozhraní API Windows.UI.Text.Core usnadňují komunikaci s textovými službami prostřednictvím Windows. Komunikace mezi ovládacím prvku pro úpravy textu a textovými službami se zpracovává primárně prostřednictvím objektu CoreTextEditContext , který poskytuje metody a události pro usnadnění komunikace.

Diagram architektury CoreText

Rozsahy textu a výběr

Ovládací prvky pro úpravy poskytují místo pro zadávání textu a uživatelé očekávají, že text budou upravovat kdekoli v tomto prostoru. Tady vysvětlujeme systém umístění textu používaný základními textovými rozhraními API a způsob znázornění rozsahů a výběrů v tomto systému.

Pozice kurzoru aplikace

Textové rozsahy používané v API základního textu jsou vyjádřeny z hlediska pozic kurzoru. Pozice kurzoru aplikace (ACP) je nula-založené číslo, které označuje počet znaků od začátku datového toku bezprostředně před polem, jak je znázorněno zde.

Snímek obrazovky zobrazující počet znaků pozice kurzoru aplikace (ACP)

Rozsahy textu a výběr

Rozsahy a výběry textu jsou reprezentovány strukturou CoreTextRange , která obsahuje dvě pole:

Obor Datový typ Description
StartCaretPosition Číslo [JavaScript] | System.Int32 [.NET] | int32 [C++] Počáteční pozice rozsahu je ACP bezprostředně před prvním znakem.
EndCaretPosition Číslo [JavaScript] | System.Int32 [.NET] | int32 [C++] Koncová pozice rozsahu je ACP bezprostředně za posledním znakem.

 

Například v oblasti textu zobrazené dříve určuje oblast [0, 5] slovo "Hello". StartCaretPosition musí být vždy menší než nebo rovno EndCaretPosition. Rozsah [5, 0] je neplatný.

Bod vložení

Aktuální pozice kurzoru, často označovaná jako pozice vkládání, je znázorněna tím, že se nastaví StartCaretPosition tak, aby byla rovna EndCaretPosition.

Nesouvislý výběr

Některé ovládací prvky pro úpravy podporují nesouvislé výběry. Aplikace Microsoft Office například podporují více libovolných výběrů a mnoho editorů zdrojového kódu podporuje výběr sloupců. Základní textová rozhraní API ale nepodporují nesouvislé výběry. Ovládací prvky pro úpravy musí hlásit pouze jeden souvislý výběr, nejčastěji aktivní dílčí oblast nesouvislých výběrů.

Například následující obrázek ukazuje textový proud se dvěma nesouvisenými výběry: [0, 1] a [6, 11], pro které musí ovládací prvek pro úpravy hlásit pouze jeden ([0, 1] nebo [6, 11]).

Snímek obrazovky znázorňující nesousedící výběr textu, kde je vybraný první znak a posledních pět znaků

Práce s textem

CoreTextEditContext třída umožňuje tok textu mezi Windows a editačními ovládacími prvky prostřednictvím TextUpdating události, TextRequested události a NotifyTextChanged metody.

Ovládací prvek pro úpravy přijímá text prostřednictvím událostí TextUpdating , které se generují, když uživatelé pracují s metodami zadávání textu, jako jsou klávesnice, řeč nebo rychlé zprávy.

Když změníte text v ovládacím prvku pro úpravy, například vložením textu do ovládacího prvku, musíte windows upozornit voláním NotifyTextChanged.

Pokud textová služba vyžaduje nový text, vyvolá se událost TextRequested . Nový text musíte zadat v obslužné rutině události TextRequested .

Příjem aktualizací textu

Ovládací prvek pro úpravy by měl obvykle přijímat žádosti o aktualizaci textu, protože představují text, který chce uživatel zadat. V obslužné rutině události TextUpdating se u ovládacího prvku pro úpravy očekávají tyto akce:

  1. Vložte text zadaný v CoreTextTextUpdatingEventArgs.Text do pozice zadané v CoreTextTextUpdatingEventArgs.Range.
  2. Umístěte výběr na pozici zadanou v CoreTextTextUpdatingEventArgs.NewSelection.
  3. Upozorněte systém, že aktualizace byla úspěšná nastavením CoreTextTextUpdatingEventArgs.Result na CoreTextTextUpdatingResult.Succeeded.

Například, toto je stav editačního pole, než uživatel napíše „d“. Bod vkládání je na [10, 10].

Snímek obrazovky s diagramem textového streamu znázorňující místo vložení v souřadnicích [10, 10] před samotným vložením

Když uživatel zadá "d", je vyvolána TextUpdating událost s následujícími daty CoreTextTextUpdatingEventArgs :

V ovládacím prvku pro úpravy použijte zadané změny a nastavte Výsledek na Úspěch. Tady je stav ovládacího prvku po použití změn.

Snímek obrazovky s diagramem textového streamu zobrazující bod vložení na [11, 11], po provedení vložení

Odmítnutí aktualizací textu

Někdy nelze použít aktualizace textu, protože požadovaný rozsah je v oblasti ovládacího prvku pro úpravy, který by neměl být změněn. V takovém případě byste neměli použít žádné změny. Místo toho upozorněte systém, že aktualizace selhala nastavením CoreTextTextUpdatingEventArgs.Result na CoreTextTextUpdatingResult.Failed.

Představte si například ovládací prvek pro úpravy, který přijímá pouze e-mailovou adresu. Mezery by měly být odmítnuty, protože e-mailové adresy nemohou obsahovat mezery, takže při vyvolání událostí TextUpdating pro mezeru byste měli jednoduše nastavit Výsledek na hodnotu Failed ve vašem editačním ovládacím prvku.

Upozorňování změn textu

Někdy váš editor změní text, například když se text vloží nebo automaticky opraví. V těchto případech je nutné upozornit textové služby těchto změn voláním NotifyTextChanged metoda.

Jedná se například o stav ovládacího prvku pro úpravy před vložením "World". Vkládací bod je na [6, 6].

Snímek obrazovky diagramu textového toku zobrazující vkládací bod na [6, 6], před vložením

Uživatel provede akci vložení a ovládací prvek pro úpravy po použití změn:

Snímek obrazovky s diagramem toku textu zobrazující bod vložení na [11, 11\], po vložení

V takovém případě byste měli volat NotifyTextChanged s těmito argumenty:

  • modifiedRange = [6, 6]
  • newLength = 5
  • newSelection = [11, 11]

Bude následovat jedna nebo více událostí TextRequested , které zpracováváte pro aktualizaci textu, se kterým textové služby pracují.

Přepsání aktualizací textu

V editačním ovládacím prvku můžete chtít nahradit aktualizaci textu, aby poskytovala funkce automatické korekce.

Představte si například ovládací prvek pro úpravu textu, který poskytuje funkci opravy, jež formalizuje stahované tvary. Toto je stav ovládacího prvku pro úpravy před tím, než uživatel zadá klávesu mezery k aktivaci opravy. Vkládací bod se nachází na [3, 3].

Snímek obrazovky s diagramem textového toku s kurzorem na pozici [3, 3] před vložením

Uživatel stiskne mezerník a vyvolá se odpovídající událost TextUpdating . Ovládací prvek pro úpravy přijímá aktualizaci textu. Toto je stav ovládacího prvku pro úpravy po krátkou chvíli před dokončením opravy. Vkládací bod je na pozici [4, 4].

Snímek obrazovky s diagramem toku textu zobrazující vkládací bod na [4, 4], po vložení textu

Mimo obslužnou rutinu události TextUpdating provede ovládací prvek pro úpravy následující opravu. Toto je stav ovládacího prvku pro úpravy po dokončení opravy. Vkládací bod je na [5, 5].

Snímek obrazovky diagramu tokového textu zobrazující bod vložení na [5, 5]

V takovém případě byste měli volat NotifyTextChanged s těmito argumenty:

  • modifiedRange = [1, 2]
  • newLength = 2
  • newSelection = [5, 5]

Bude následovat jedna nebo více událostí TextRequested , které zpracováváte pro aktualizaci textu, se kterým textové služby pracují.

Poskytnutí požadovaného textu

Je důležité, aby textové služby měly správný text, aby poskytovaly funkce, jako je automatická oprava nebo predikce, zejména pro text, který už existoval v ovládacím prvku pro úpravy, od načtení dokumentu, například textu, který je vložen ovládacím prvku pro úpravy, jak je vysvětleno v předchozích částech. Proto při každém vyvolání události TextRequested je nutné poskytnout text, který je aktuálně v ovládacím prvku pro úpravy v rámci zadaného rozsahu.

Budou chvíle, kdy rozsah ve CoreTextTextRequest určuje rozsah, který váš ovládací prvek pro úpravy nemůže přizpůsobit ve stávající podobě. Například rozsah je větší než velikost ovládacího prvku pro úpravy v době události TextRequested nebo konec rozsahu je mimo hranice. V těchto případech byste měli vrátit jakýkoli rozsah, který dává smysl, což je obvykle podmnožina požadovaného rozsahu.

Samples

Archivní ukázky