Ö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 ContentPagetarafı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 MyEntry Özel Denetimi

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:

  1. Yerel denetimi işleyen işleyici sınıfının bir alt sınıfını oluşturun.
  2. 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.
  3. 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.