Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A Windows.UI.Text.Core névtérben található alapvető szöveges API-k lehetővé teszik, hogy a Windows-alkalmazások szöveges bemeneteket kapjanak a Windows-eszközökön támogatott bármely szöveges szolgáltatásból. Az API-k hasonlóak a Text Services Framework API-khoz, mert az alkalmazásnak nem kell részletes ismeretekkel rendelkeznie a szövegszolgáltatásokról. Ez lehetővé teszi, hogy az alkalmazás bármilyen nyelven és bármilyen bemeneti típusból (például billentyűzetről, beszédből vagy tollból) fogadjon szöveget.
Fontos API-k: Windows.UI.Text.Core, CoreTextEditContext
Miért érdemes alapvető szöveges API-kat használni?
Sok alkalmazás esetében az XAML- vagy HTML-szövegdoboz-vezérlők elegendőek a szövegbevitelhez és a szerkesztéshez. Ha azonban az alkalmazás összetett szövegforgatókönyveket( például szövegszerkesztő alkalmazásokat) kezel, szükség lehet egy egyéni szövegszerkesztő vezérlő rugalmasságára. A CoreWindow billentyűzet API-kkal létrehozhatja a szövegszerkesztési vezérlőt, de ezek nem biztosítják a kelet-ázsiai nyelvek támogatásához szükséges kompozícióalapú szövegbevitel fogadását.
Ehelyett használja a Windows.UI.Text.Core API-kat, ha egyéni szöveg szerkesztési vezérlőt kell létrehoznia. Ezek az API-k úgy lettek kialakítva, hogy nagy rugalmasságot biztosítsanak a szövegbevitel bármilyen nyelven történő feldolgozásában, és lehetővé teszik az alkalmazáshoz leginkább illő szövegélmény biztosítását. A szövegbeviteli és szerkesztési vezérlők az alapvető szöveges API-k segítségével fogadják a windowsos eszközök összes meglévő szövegbeviteli metódusát, a Text Services Framework-alapú beviteli módszer szerkesztőitől (IME-ktől) és a számítógépeken lévő kézírástól a WordFlow billentyűzetig (amely automatikus javítást, előrejelzést és diktálást biztosít) a mobileszközökön.
Architecture
Az alábbiakban a szövegbeviteli rendszer egyszerű ábrázolása található.
- Az "Alkalmazás" egy olyan Windows-alkalmazást jelöl, amely az alapvető szöveges API-k használatával létrehozott egyéni szerkesztési vezérlőt üzemeltet.
- A Windows.UI.Text.Core API-k megkönnyítik a szöveges szolgáltatásokkal való kommunikációt a Windowson keresztül. A szövegszerkesztési vezérlő és a szövegszolgáltatások közötti kommunikációt elsősorban egy CoreTextEditContext objektum kezeli, amely a kommunikációt megkönnyítő módszereket és eseményeket biztosítja.
Szövegtartományok és kijelölés
A szerkesztési vezérlők helyet biztosítanak a szövegbevitelhez, és a felhasználók várhatóan bárhol szerkeszthetik a szöveget ezen a helyen. Itt ismertetjük az alapvető szöveges API-k által használt szöveghelyezési rendszert, valamint azt, hogy a tartományok és a kijelölések hogyan jelennek meg ebben a rendszerben.
Alkalmazás kurzorpozíciója
Az alapvető szöveges API-khoz használt szövegtartományok a kurzor pozíciókban vannak megadva. Az "Application Caret Position (ACP)" egy nulla alapú szám, amely a szövegfolyam elejétől közvetlenül a kurzor előtt lévő karakterek számát jelzi, ahogy az itt látható.
Szövegtartományok és kijelölés
A szövegtartományokat és a kijelöléseket a CoreTextRange struktúra jelöli, amely két mezőt tartalmaz:
| szakterület | Adattípus | Description |
|---|---|---|
| StartCaretPosition | Szám [JavaScript] | System.Int32 [.NET] | int32 [C++] | A tartomány kezdőpozíciója az ACP, közvetlenül az első karakter előtt. |
| EndCaretPosition | Szám [JavaScript] | System.Int32 [.NET] | int32 [C++] | A tartomány végpozíciója az AKCS, közvetlenül az utolsó karakter után. |
A korábban látható szövegtartományban például a [0, 5] tartomány a "Hello" szót adja meg. A StartCaretPosition-nak mindig kisebbnek vagy egyenlőnek kell lennie, mint az EndCaretPosition. Az [5, 0] tartomány érvénytelen.
Beszúrási pont
Az aktuális kurzor pozíciót (más néven beszúrási pontot) úgy ábrázolják, hogy a StartCaretPosition értéke megegyezik az EndCaretPosition értékével.
Nem egyértelmű kijelölés
Egyes szerkesztési vezérlők nem egyértelmű kijelöléseket támogatnak. A Microsoft Office-alkalmazások például több tetszőleges kijelölést támogatnak, és számos forráskódszerkesztő támogatja az oszlopkiválasztást. Az alapvető szöveges API-k azonban nem támogatják a nem összefüggő kijelöléseket. A szerkesztési vezérlőknek csak egyetlen összefüggő kijelölést kell jelentenie, leggyakrabban a nem egyértelmű kijelölések aktív altartományát.
Az alábbi képen például egy szövegfolyam látható két nem összefüggő kijelöléssel: [0, 1] és [6, 11], amelyeknél a szerkesztési vezérlőnek csak egyet kell jelentenie ([0, 1] vagy [6, 11]).
Szöveg használata
A CoreTextEditContext osztály a TextUpdating eseményen, a TextRequested eseményen és az NotifyTextChanged metóduson keresztül engedélyezi a szövegfolyamot a Windows és a szerkesztési vezérlők között.
A szerkesztési vezérlő szövegbeviteli eseményeken keresztül fogadja a szöveget, amelyek akkor jönnek létre, amikor a felhasználók szövegbeviteli módszerekkel , például billentyűzetekkel, beszéddel vagy csevegőgépekkel kommunikálnak.
Ha módosítja a szerkesztési vezérlő szövegét, például ha szöveget illeszt be a vezérlőbe, a NotifyTextChanged meghívásával értesítenie kell a Windowst.
Ha a szövegszolgáltatásnak szüksége van az új szövegre, akkor létrejön egy TextRequested esemény. Meg kell adnia az új szöveget a TextRequested eseménykezelőben.
Szövegfrissítések elfogadása
A szerkesztési vezérlőnek általában szövegfrissítési kéréseket kell elfogadnia, mert azok a felhasználó által beírandó szöveget jelölik. A TextUpdating eseménykezelőben ezek a műveletek a szerkesztési vezérlőtől várhatók:
- Szúrja be a CoreTextTextUpdatingEventArgs.Text fájlban megadott szöveget a CoreTextTextUpdatingEventArgs.Range fájlban megadott helyre.
- Helyezze a kijelölést a CoreTextTextUpdatingEventArgs.NewSelection fájlban megadott helyre.
- Értesítse a rendszert, hogy a frissítés sikeres volt, a CoreTextTextUpdatingEventArgs.Result értékének CoreTextTextUpdatingResult.Succeeded-re állításával.
Ez például egy szerkesztési vezérlő állapota, mielőtt a felhasználó a "d" típust választja. A beszúrási pont a következő: [10, 10].
Amikor a felhasználó a "d" típust írja be, a rendszer a következő CoreTextTextUpdatingEventArgs-adatokkal egy TextUpdating eseményt hoz létre:
- Tartomány = [10, 10]
- Szöveg = "d"
- NewSelection = [11, 11]
A szerkesztési vezérlőben alkalmazza a megadott módosításokat, és állítsa az eredménytsikeresre. A módosítások alkalmazása után a vezérlő állapota a következő.
Szövegfrissítések elutasítása
Előfordulhat, hogy a szövegfrissítések nem alkalmazhatók, mert a kért tartomány a szerkesztési vezérlő olyan területén található, amelyet nem szabad módosítani. Ebben az esetben nem alkalmazhat módosításokat. Ehelyett értesítse a rendszert arról, hogy a frissítés meghiúsult a CoreTextTextUpdatingEventArgs.Result to CoreTextTextUpdatingResult.Failed beállításával.
Vegyük például egy szerkesztési vezérlőt, amely csak egy e-mail címet fogad el. A szóközöket el kell utasítani, mert az e-mail-címek nem tartalmazhatnak szóközöket, ezért amikor TextUpdating eseményeket emelnek ki a szóközbillentyűhöz, egyszerűen állítsa a Result értékét Failed-re a szerkesztési vezérlőben.
Szövegmódosítások értesítése
Előfordulhat, hogy a szerkesztési vezérlő módosítja a szöveget, például a szöveg beillesztésekor vagy automatikus javításakor. Ezekben az esetekben a NotifyTextChanged metódus meghívásával értesítenie kell a szöveges szolgáltatásokat ezekről a változásokról.
Ez például egy szerkesztési vezérlő állapota, mielőtt a felhasználó beillesztené a "World" szöveget. A beszúrási pont a következő: [6, 6].
A felhasználó végrehajtja a beillesztési műveletet és a szerkesztési vezérlőt a módosítások alkalmazása után:
Ha ez történik, az alábbi argumentumokkal kell meghívnia a NotifyTextChanged függvényt :
- modifiedRange = [6, 6]
- newLength = 5
- newSelection = [11, 11]
Egy vagy több TextRequested esemény következik, amelyeket a szövegszolgáltatások által kezelt szöveg frissítésére használsz.
Szövegfrissítések felülírása
A szerkesztési vezérlőben felülbírálhat egy szövegfrissítést, hogy automatikus javítási lehetőségeket biztosítson.
Vegyük például egy szerkesztési vezérlőt, amely egy olyan korrekciós funkciót biztosít, amely formálissá teszi a kontrakciókat. Ez a szerkesztési vezérlő állapota, mielőtt a felhasználó beszedi a szóközbillentyűt a javítás elindításához. A beszúrási pont a következő: [3, 3].
A felhasználó lenyomja a szóközbillentyűt, és egy megfelelő TextUpdating esemény jön létre. A szerkesztési vezérlő elfogadja a szövegfrissítést. Ez a szerkesztési vezérlő állapota egy rövid ideig, mielőtt a javítás befejeződik. A beszúrási pont a következő: [4, 4].
A TextUpdating eseménykezelőn kívül a szerkesztési vezérlő az alábbi javítást hajtja végre. Ez a szerkesztési vezérlő állapota a javítás befejezése után. A beszúrási pont a következő: [5, 5].
Ha ez történik, az alábbi argumentumokkal kell meghívnia a NotifyTextChanged függvényt :
- modifiedRange = [1, 2]
- newLength = 2
- newSelection = [5, 5]
Egy vagy több TextRequested esemény következik, amelyeket a szövegszolgáltatások által kezelt szöveg frissítésére használsz.
Kért szöveg megadása
Fontos, hogy a szövegszolgáltatások megfelelő szövegekkel rendelkezzenek, hogy olyan funkciókat biztosítsanak, mint az automatikus javítás vagy az előrejelzés, különösen a szerkesztési vezérlőben már létező szövegek esetében, például a dokumentum betöltésétől, vagy a szerkesztési vezérlő által beszúrt szövegtől az előző szakaszokban leírtak szerint. Ezért amikor egy TextRequested esemény bekövetkezik, meg kell adnia a szerkesztési vezérlőben található szöveget a megadott tartományhoz.
Előfordulhat, hogy a CoreTextTextRequesttartománya olyan tartományt határoz meg, amelyet a szerkesztési vezérlő nem tud befogadni as-is. A tartomány például nagyobb, mint a szerkesztő vezérlő mérete a TextRequested esemény idején, vagy a tartomány vége a határon kívül van. Ezekben az esetekben minden értelmes tartományt vissza kell adnia, ami általában a kért tartomány egy részhalmaza.
Kapcsolódó cikkek
Samples
Archív minták
Windows developer