Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Windows.UI.Text.Core ad alanında çekirdek metin API'leri, windows uygulamasının Windows cihazlarında desteklenen herhangi bir metin hizmetinden metin girişi almasını sağlar. API'ler, metin hizmetleri hakkında ayrıntılı bilgi sahibi olmak için uygulamanın gerekli olmaması nedeniyle Metin Hizmetleri Çerçevesi API'lerine benzer. Bu, uygulamanın herhangi bir dilde ve herhangi bir giriş türünden (klavye, konuşma veya kalem gibi) metin almasını sağlar.
Önemli API'ler: Windows.UI.Text.Core, CoreTextEditContext
Temel metin API'leri neden kullanılır?
Birçok uygulama için XAML veya HTML metin kutusu denetimleri metin girişi ve düzenleme için yeterlidir. Ancak, uygulamanız sözcük işleme uygulaması gibi karmaşık metin senaryolarını işliyorsa, özel metin düzenleme denetimi esnekliğine ihtiyacınız olabilir. Metin düzenleme denetiminizi oluşturmak için CoreWindow klavye API'lerini kullanabilirsiniz, ancak bunlar Doğu Asya dillerini desteklemek için gereken bileşim tabanlı metin girişini almak için bir yol sağlamaz.
Bunun yerine, özel metin düzenleme denetimi oluşturmanız gerektiğinde Windows.UI.Text.Core API'lerini kullanın. Bu API'ler, metin girişini her dilde işlemede size çok fazla esneklik sağlayacak şekilde tasarlanmıştır ve uygulamanıza en uygun metin deneyimini sağlamanıza olanak sağlar. Çekirdek metin API'leri ile oluşturulan metin girişi ve düzenleme denetimleri, Windows cihazlarında Metin Hizmetleri Çerçevesi tabanlı Giriş Yöntemi Düzenleyicileri'nden (IME'ler) ve bilgisayarlardaki el yazısından mobil cihazlardaki WordFlow klavyesine (otomatik düzeltme, tahmin ve dikte sağlayan) tüm metin giriş yöntemlerinden metin girişi alabilir.
Architecture
Aşağıda metin giriş sisteminin basit bir gösterimi yer alır.
- "Uygulama", çekirdek metin API'leri kullanılarak oluşturulan özel düzenleme denetimini barındıran bir Windows uygulamasını temsil eder.
- Windows.UI.Text.Core API'leri, Windows aracılığıyla metin hizmetleriyle iletişimi kolaylaştırır. Metin düzenleme denetimi ile metin hizmetleri arasındaki iletişim öncelikle iletişimi kolaylaştırmak için yöntemleri ve olayları sağlayan bir CoreTextEditContext nesnesi aracılığıyla işlenir.
Metin aralıkları ve seçimi
Düzenleme denetimleri metin girişi için alan sağlar ve kullanıcılar bu alanın herhangi bir yerinde metin düzenlemeyi bekler. Burada, çekirdek metin API'leri tarafından kullanılan metin konumlandırma sistemini ve aralıkların ve seçimlerin bu sistemde nasıl temsil olduğunu açıklayacağız.
Uygulama imleç konumu
Metin API'lerinin çekirdek fonksiyonları ile kullanılan metin aralıkları, imleç konumları açısından ifade edilir. "Uygulama İmleç Konumu (ACP)", metin dizisinin başlangıcından itibaren imleçten hemen önceki karakterlerin sayısını gösteren sıfır tabanlı bir sayıdır.
Metin aralıkları ve seçimi
Metin aralıkları ve seçimleri, iki alan içeren CoreTextRange yapısıyla temsil edilir:
| Veri Alanı | Veri türü | Description |
|---|---|---|
| StartCaretPosition | Sayı [JavaScript] | System.Int32 [.NET] | int32 [C++] | Aralığın başlangıç konumu, ilk karakterin hemen öncesinde bulunan ACP'dir. |
| EndCaretPosition | Sayı [JavaScript] | System.Int32 [.NET] | int32 [C++] | Bir aralığın bitiş konumu, son karakterden hemen sonraki ACP'dir. |
Örneğin, daha önce gösterilen metin aralığında [0, 5] aralığı "Hello" sözcüğünü belirtir. StartCaretPosition her zaman EndCaretPosition değerinden küçük veya eşit olmalıdır. [5, 0] aralığı geçersiz.
Ekleme noktası
Geçerli eklem yeri konumu, sıklıkla ekleme noktası olarak adlandırılır ve StartCaretPosition değeri EndCaretPosition değerine eşit ayarlanarak temsil edilir.
Bitişik olmayan seçim
Bazı düzenleme denetimleri bitişik olmayan seçimleri destekler. Örneğin, Microsoft Office uygulamaları birden çok rastgele seçimi destekler ve birçok kaynak kodu düzenleyicisi sütun seçimini destekler. Ancak, çekirdek metin API'leri bitişik olmayan seçimleri desteklemez. Düzenleme denetimleri yalnızca tek bir bitişik seçimi, çoğu zaman bitişik olmayan seçimlerin etkin alt aralığını raporlamalıdır.
Örneğin, aşağıdaki görüntüde iki bitişik olmayan seçim içeren bir metin akışı gösterilmektedir: [0, 1] ve [6, 11] ve düzenleme denetiminin yalnızca bir tane ([0, 1] veya [6, 11]) raporlaması gerekir.
Metinle çalışma
CoreTextEditContext sınıfı TextUpdating olayı, TextRequested olayı ve NotifyTextChanged yöntemi aracılığıyla Windows ve düzenleme denetimleri arasında metin akışını etkinleştirir.
Düzenleme denetiminiz, kullanıcılar klavye, konuşma veya IMI gibi metin giriş yöntemleriyle etkileşime geçtiğinde oluşturulan TextUpdating olayları aracılığıyla metin alır.
Düzenleme denetiminizdeki metni değiştirdiğinizde, örneğin, denetime metin yapıştırdığınızda NotifyTextChanged'i çağırarak Windows'a bildirmeniz gerekir.
Metin hizmeti yeni metni gerektiriyorsa textRequested olayı oluşturulur. TextRequested olay işleyicisinde yeni metni sağlamanız gerekir.
Metin güncelleştirmelerini kabul etme
Düzenleme denetiminiz genellikle kullanıcının girmek istediği metni temsil ettiğinden metin güncelleştirme isteklerini kabul etmelidir. TextUpdating olay işleyicisinde bu eylemler düzenleme denetiminizden beklenir:
- CoreTextTextUpdatingEventArgs.Text içinde belirtilen metni CoreTextUpdatingEventArgs.Range içinde belirtilen konuma ekleyin.
- Seçimi CoreTextTextUpdatingEventArgs.NewSelection içinde belirtilen konuma yerleştirin.
- CoreTextTextUpdatingEventArgs.Result öğesini CoreTextTextUpdatingResult.Succeeded olarak ayarlayarak güncelleştirmenin başarılı olduğunu sisteme bildirin.
Örneğin, bu, kullanıcı "d" tuşuna basmadan önce bir düzenleme kutusunun durumudur. Ekleme noktası [10, 10] konumundadır.
Kullanıcı "d" yazdığınızda, aşağıdaki CoreTextTextUpdatingEventArgs verileriyle bir TextUpdating olayı oluşturulur:
- Aralık = [10, 10]
- Metin = "d"
- NewSelection = [11, 11]
Düzenleme denetiminizde, belirtilen değişiklikleri uygulayın ve Sonuç seçeneğini Başarılı olarak ayarlayın. Değişiklikler uygulandıktan sonra denetimin durumu aşağıdadır.
Metin güncelleştirmelerini reddetme
Bazen, istenen aralık düzenleme denetiminin değiştirilmemesi gereken bir alanında olduğundan metin güncelleştirmelerini uygulayamazsınız. Bu durumda, hiçbir değişiklik uygulamamalısınız. Bunun yerine, CoreTextTextUpdatingEventArgs.Result ayarını CoreTextTextUpdatingResult.Failed olarak ayarlayarak güncelleştirmenin başarısız olduğunu sisteme bildirin.
Örneğin, yalnızca e-posta adresini kabul eden bir düzenleme denetimi düşünün. E-posta adresleri boşluk içeremediğinden boşluklar reddedilmelidir, bu nedenle boşluk anahtarı için TextUpdating olayları tetiklendiğinde düzenleme denetiminizde Sonuç seçeneğini Başarısız olarak ayarlamanız yeterlidir.
Metin değişikliklerini bildirme
Düzenleme denetiminiz bazen metin yapıştırıldığında veya otomatik olarak düzeltildiğinde olduğu gibi metinlerde değişiklik yapar. Böyle durumlarda, NotifyTextChanged yöntemini çağırarak metin hizmetlerine bu değişiklikleri bildirmeniz gerekir.
Örneğin, kullanıcı "World" kelimesini yapıştırmadan önce bir düzenleme denetiminin durumu şöyledir. Ekleme noktası [6, 6] konumundadır.
Kullanıcı, değişiklikler uygulandıktan sonra yapıştırma eylemini ve düzenleme denetimini gerçekleştirir:
Böyle bir durumda NotifyTextChanged'i şu bağımsız değişkenlerle çağırmalısınız:
- modifiedRange = [6, 6]
- newLength = 5
- newSelection = [11, 11]
Metin hizmetlerinin üzerinde çalıştığı metni güncelleştirmek için işlediğiniz bir veya daha fazla TextRequested olayı izlenir.
Metin güncelleştirmelerini geçersiz kılma
Düzenleme denetiminizde, otomatik düzeltme özellikleri sağlamak için bir metin güncelleştirmesini geçersiz kılmak isteyebilirsiniz.
Örneğin, kısaltmaları resmileştiren bir düzeltme özelliği sunan bir düzenleme denetimi düşünün. Bu, kullanıcı düzeltmeyi tetikleyen boşluk anahtarını girmeden önce düzenleme denetiminin durumudur. Ekleme noktası [3, 3] konumundadır.
Kullanıcı boşluk tuşuna basar ve buna karşılık gelen textUpdating olayı oluşturulur. Düzenleme denetimi metin güncelleştirmesini kabul eder. Bu, düzeltme tamamlanmadan önce düzenleme denetiminin kısa bir süre için durumudur. Ekleme noktası [4, 4] konumundadır.
TextUpdating olay işleyicisinin dışında düzenleme denetimi aşağıdaki düzeltmeyi yapar. Bu, düzeltme tamamlandıktan sonra düzenleme denetiminin durumudur. Ekleme noktası [5, 5] konumundadır.
Böyle bir durumda NotifyTextChanged'i şu bağımsız değişkenlerle çağırmalısınız:
- modifiedRange = [1, 2]
- newLength = 2
- newSelection = [5, 5]
Metin hizmetlerinin üzerinde çalıştığı metni güncelleştirmek için işlediğiniz bir veya daha fazla TextRequested olayı izlenir.
İstenen metni sağlama
Metin hizmetlerinin, özellikle bir belgeyi yüklemek veya düzenleme denetimi tarafından eklenen metinler gibi, düzenleme denetiminde hali hazırda bulunan metinler için otomatik düzeltme veya tahmin özellikleri sunabilmesi adına doğru metne sahip olması önemlidir, önceki bölümlerde açıklandığı gibi. Bu nedenle, bir TextRequested olayı her tetiklendiğinde, belirtilen aralık için düzenleme denetiminizde bulunan metni sağlamanız gerekir.
CoreTextTextRequest içinde belirtilen Aralık bazen düzenleme denetiminizin olduğu gibi barındıramayacağı bir aralık içerebilir. Örneğin, Aralık, TextRequested olayı sırasında düzenleme denetiminin boyutundan daha büyükse veya Aralık'ın sonu sınırların dışındaysa. Bu tür durumlarda, genellikle istenen aralığın bir alt kümesi olan anlamlı bir aralığı döndürmelisiniz.
İlgili makaleler
Samples
Arşiv örnekleri
Windows developer