Özel oluşturuculara giriş
Özel işleyiciler, denetimlerin görünümünü ve davranışını Xamarin.Forms özelleştirmek için güçlü bir yaklaşım sağlar. Bunlar küçük stil değişiklikleri veya platforma özgü karmaşık düzen ve davranış özelleştirmesi için kullanılabilir. Bu makalede özel işleyicilere giriş bilgileri sağlanır ve özel işleyici oluşturma işlemi özetlenir.
Xamarin.FormsSayfalar, Düzenler ve Denetimler , platformlar arası mobil kullanıcı arabirimlerini açıklamak için ortak bir API sunar. Her sayfa, düzen ve denetim, her platformda farklı şekilde işlenir ve böylece yerel bir denetim oluşturan (gösterime Xamarin.Forms karşılık gelen), bunu ekranda yerleştiren ve paylaşılan kodda belirtilen davranışı ekleyen bir Renderer
sınıf kullanılır.
Geliştiriciler, kendi özel Renderer
sınıflarını uygulayarak denetimlerin görünümünü ve/veya davranışını özelleştirebilir. Belirli bir tür için özel işleyiciler, denetimi tek bir yerde özelleştirmek ve diğer platformlarda varsayılan davranışa izin vermek için bir uygulama projesine eklenebilir; veya iOS, Android ve Evrensel Windows Platformu (UWP) üzerinde farklı bir görünüm ve görünüm oluşturmak için her uygulama projesine farklı özel işleyiciler eklenebilir. Ancak, basit bir denetim özelleştirmesi gerçekleştirmek için özel işleyici sınıfı uygulamak genellikle ağır bir yanıttır. Efektler bu işlemi basitleştirir ve genellikle küçük stil değişiklikleri için kullanılır. Daha fazla bilgi için bkz. Efektler.
Özel oluşturucuların neden gerekli olduğunu inceleme
Özel işleyici kullanmadan denetimin Xamarin.Forms görünümünü değiştirmek, alt sınıflama aracılığıyla özel denetim oluşturmayı ve ardından özgün denetimin yerine özel denetimi kullanmayı içeren iki adımlı bir işlemdir. Aşağıdaki kod örneği, denetimi alt sınıflama örneğini Entry
gösterir:
public class MyEntry : Entry
{
public MyEntry ()
{
BackgroundColor = Color.Gray;
}
}
DenetimMyEntry
, öğesinin BackgroundColor
gri olarak ayarlandığı bir Entry
denetimdir ve konumu için bir ad alanı bildirilerek ve denetim öğesinde ad alanı ön eki kullanılarak Xaml'de başvurulabilir. Aşağıdaki kod örneği, özel denetimin MyEntry
bir ContentPage
tarafından nasıl tüketilebileceğini gösterir:
<ContentPage
...
xmlns:local="clr-namespace:CustomRenderer;assembly=CustomRenderer"
...>
...
<local:MyEntry Text="In Shared Code" />
...
</ContentPage>
Ad local
alanı ön eki herhangi bir şey olabilir. Ancak ve namespace
assembly
değerleri özel denetimin ayrıntılarıyla eşleşmelidir. Ad alanı bildirildikten sonra, özel denetime başvurmak için ön ek kullanılır.
Not
.NET Standart kitaplık projelerinde öğesini xmlns
tanımlamak, Paylaşılan Projeler'den çok daha basittir. .NET Standard kitaplığı bir derlemede derlendiğinden, değerin assembly=CustomRenderer
ne olması gerektiğini kolayca belirleyebilirsiniz. Paylaşılan Projeler kullanılırken, tüm paylaşılan varlıklar (XAML dahil) başvuran projelerin her birinde derlenir, yani iOS, Android ve UWP projelerinin kendi derleme adları varsa, değerin her uygulama için farklı olması gerektiğinden xmlns
bildirimi yazmak imkansızdır. Paylaşılan Projeler için XAML'deki özel denetimler, her uygulama projesinin aynı derleme adıyla yapılandırılmasını gerektirir.
Özel MyEntry
denetim, aşağıdaki ekran görüntülerinde gösterildiği gibi her platformda gri bir arka planla işlenir:
Her platformda denetimin arka plan renginin değiştirilmesi, yalnızca denetimin alt sınıflanmasıyla gerçekleştirilir. Ancak bu teknik, platforma özgü geliştirmelerden ve özelleştirmelerden yararlanmak mümkün olmadığından elde edilebilecek özelliklerle sınırlıdır. Gerekli olduğunda, özel işleyiciler uygulanmalıdır.
Özel oluşturucu sınıfı oluşturma
Özel işleyici sınıfı oluşturma işlemi aşağıdaki gibidir:
- Yerel denetimi işleyen işleyici sınıfının bir alt sınıfını oluşturun.
- Yerel denetimi işleyen yöntemini geçersiz kılın ve denetimi özelleştirmek için mantık yazın. Genellikle yöntemi,
OnElementChanged
karşılık gelen Xamarin.Forms denetim oluşturulduğunda çağrılan yerel denetimi işlemek için kullanılır. - Denetimi işlemek için kullanılacağını belirtmek için özel işleyici sınıfına Xamarin.Forms bir
ExportRenderer
öznitelik ekleyin. Bu öznitelik, özel işleyiciyi ile Xamarin.Formskaydetmek için kullanılır.
Not
Çoğu Xamarin.Forms öğe için, her platform projesinde özel işleyici sağlamak isteğe bağlıdır. Özel işleyici kaydedilmemişse, denetimin temel sınıfı için varsayılan işleyici kullanılır. Ancak, bir View veya ViewCell öğesi işlenirken her platform projesinde özel işleyiciler gerekir.
Bu serideki konular, farklı Xamarin.Forms öğeler için bu sürecin tanıtımlarını ve açıklamalarını sağlayacaktır.
Sorun giderme
Çözüme eklenmiş bir .NET Standard kitaplık projesinde özel denetim varsa (Mac için Visual Studio/Visual Studio Xamarin.Forms Uygulama projesi şablonu tarafından oluşturulan .NET Standart kitaplığı değil), özel denetime erişmeye çalışırken iOS'ta bir özel durum oluşabilir. Bu sorun oluşursa, sınıfından AppDelegate
özel denetime bir başvuru oluşturularak çözülebilir:
var temp = new ClassInPCL(); // in AppDelegate, but temp not used anywhere
Bu, derleyiciyi türü çözümleyerek tanımaya ClassInPCL
zorlar. Alternatif olarak, Preserve
aynı sonucu elde etmek için özniteliği sınıfına eklenebilir AppDelegate
:
[assembly: Preserve (typeof (ClassInPCL))]
Bu, türüne ClassInPCL
bir başvuru oluşturur ve çalışma zamanında gerekli olduğunu belirtir. Daha fazla bilgi için bkz . Kodu Koruma.
Özet
Bu makale özel işleyicilere giriş niteliğindedir ve özel işleyici oluşturma işlemini özetlemiştir. Özel işleyiciler, denetimlerin görünümünü ve davranışını Xamarin.Forms özelleştirmek için güçlü bir yaklaşım sağlar. Bunlar küçük stil değişiklikleri veya platforma özgü karmaşık düzen ve davranış özelleştirmesi için kullanılabilir.