Aracılığıyla paylaş


Bir Girdiyi Özelleştirme

Xamarin.Forms Giriş denetimi, tek bir metin satırının düzenlenmesine izin verir. Bu makalede, geliştiricilerin kendi platforma özgü özelleştirmeleriyle varsayılan yerel işlemeyi geçersiz kılmasını sağlayan Giriş denetimi için özel işleyici oluşturma adımları gösterilmektedir.

Her Xamarin.Forms denetimin, yerel bir denetimin örneğini oluşturan her platform için eşlik eden işleyicisi vardır. Bir Entry denetim bir Xamarin.Forms uygulama tarafından işlendiğinde, iOS'ta EntryRenderer sınıfın örneği oluşturulur ve bu da sırayla yerel UITextField bir denetimin örneğini oluşturur. Android platformunda EntryRenderer sınıf bir EditText denetim örneği oluşturur. Evrensel Windows Platformu (UWP) sınıfı EntryRenderer bir TextBox denetim örneği oluşturur. Eşlenmeyi denetleen Xamarin.Forms işleyici ve yerel denetim sınıfları hakkında daha fazla bilgi için bkz . oluşturucu Temel Sınıfları ve Yerel Denetimler.

Aşağıdaki diyagramda denetim ile bunu uygulayan ilgili yerel denetimler arasındaki Entry ilişki gösterilmektedir:

Giriş Denetimi ile Yerel Denetimleri Uygulama Arasındaki İlişki

İşleme işlemi, her platformda denetim için özel bir işleyici oluşturarak platforma Entry özgü özelleştirmeler uygulamak için kullanılabilir. Bunu yapma işlemi aşağıdaki gibidir:

  1. Özel denetim Xamarin.Forms oluşturma.
  2. 'den Xamarin.Formsözel denetimi kullanma.
  3. Her platformda denetim için özel işleyici oluşturun .

Artık her platformda farklı bir arka plan rengine sahip bir Entry denetim uygulamak için her öğe sırayla ele alınacaktır.

Önemli

Bu makalede basit bir özel işleyicinin nasıl oluşturulacağı açıklanmaktadır. Ancak, her platformda farklı bir arka plan rengine sahip bir Entry uygulamak için özel işleyici oluşturmak gerekmez. Bu, platforma Device özgü değerler sağlamak için sınıfı veya OnPlatform işaretleme uzantısı kullanılarak daha kolay gerçekleştirilebilir. Daha fazla bilgi için bkz . Platforma Özgü Değerler Sağlama ve Platformda Biçimlendirme Uzantısı.

Özel Giriş Denetimi Oluşturma

Aşağıdaki kod örneğinde gösterildiği gibi, denetimin Entry alt sınıfı oluşturularak özel Entry bir denetim oluşturulabilir:

public class MyEntry : Entry
{
}

Denetim MyEntry .NET Standart kitaplık projesinde oluşturulur ve yalnızca bir Entry denetimdir. Denetimin özelleştirmesi özel işleyicide gerçekleştirilir, bu nedenle denetimde MyEntry ek uygulama gerekmez.

Özel Denetimi Kullanma

Denetimin MyEntry konumu için bir ad alanı bildirilerek ve denetim öğesinde ad alanı ön eki kullanılarak .NET Standart kitaplık projesindeki XAML'de denetime başvurulabilir. Aşağıdaki kod örneği, denetimin MyEntry bir XAML sayfası 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 adla adlandırılabilir. Ancak ve clr-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.

Aşağıdaki kod örneği, denetimin MyEntry bir C# sayfası tarafından nasıl kullanılıp kullanılamayabileceğini gösterir:

public class MainPage : ContentPage
{
  public MainPage ()
  {
    Content = new StackLayout {
      Children = {
        new Label {
          Text = "Hello, Custom Renderer !",
        },
        new MyEntry {
          Text = "In Shared Code",
        }
      },
      VerticalOptions = LayoutOptions.CenterAndExpand,
      HorizontalOptions = LayoutOptions.CenterAndExpand,
    };
  }
}

Bu kod, sayfada hem dikey hem de yatay olarak ortalanmış bir ve MyEntry denetimi görüntüleyen yeni ContentPage bir Label nesnenin örneğini oluşturur.

Artık her platformda denetimin görünümünü özelleştirmek için her uygulama projesine özel işleyici eklenebilir.

Her Platformda Özel oluşturucu oluşturma

Özel işleyici sınıfını oluşturma işlemi aşağıdaki gibidir:

  1. Yerel denetimi işleyen sınıfının bir alt sınıfını EntryRenderer oluşturun.
  2. OnElementChanged Yerel denetimi işleyen yöntemini geçersiz kılın ve denetimi özelleştirmek için mantık yazın. Bu yöntem, karşılık gelen Xamarin.Forms denetim oluşturulduğunda çağrı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

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.

Aşağıdaki diyagramda, örnek uygulamadaki her projenin sorumlulukları ve aralarındaki ilişkiler gösterilmektedir:

MyEntry Özel oluşturucu Proje Sorumlulukları

Denetim MyEntry , her platform için sınıfından türetilen platforma özgü MyEntryRenderer sınıflar EntryRenderer tarafından işlenir. Bu, her MyEntry denetimin aşağıdaki ekran görüntülerinde gösterildiği gibi platforma özgü bir arka plan rengiyle işlenmesine neden olur:

Her Platformda MyEntry Denetimi

EntryRenderer sınıfı, ilgili yerel denetimi işlemek için denetim oluşturulduğunda çağrılan Xamarin.Forms yöntemini kullanıma sunarOnElementChanged. Bu yöntem ve NewElement özelliklerini içeren OldElement bir ElementChangedEventArgs parametre alır. Bu özellikler, işleyicinin eklendiği öğeyi ve Xamarin.Forms sırasıyla işleyicinin eklendiği öğeyi temsil Xamarin.Forms edilir. Örnek uygulamada OldElement özelliği olur null ve NewElement özelliği denetime MyEntry bir başvuru içerir.

sınıfındaki OnElementChanged MyEntryRenderer yönteminin geçersiz kılınmış bir sürümü, yerel denetim özelleştirmesini gerçekleştirebileceğiniz yerdir. Platformda kullanılan yerel denetime yazılan başvuruya özelliği üzerinden Control erişilebilir. Ayrıca, örnek uygulamada kullanılmasa da, işlenen denetime bir başvuru Xamarin.Forms özelliği aracılığıyla Element elde edilebilir.

Her özel işleyici sınıfı, işleyiciyi ile kaydeden bir ExportRenderer öznitelikle Xamarin.Formsdekore edilmiştir. özniteliği iki parametre alır: işlenen denetimin Xamarin.Forms tür adı ve özel işleyicinin tür adı. assembly özniteliğinin ön eki, özniteliğin tüm derleme için geçerli olduğunu belirtir.

Aşağıdaki bölümlerde platforma özgü MyEntryRenderer özel işleyici sınıflarının uygulanması açıklanmıştır.

iOS'ta Özel oluşturucu oluşturma

Aşağıdaki kod örneği, iOS platformu için özel işleyiciyi gösterir:

using Xamarin.Forms.Platform.iOS;

[assembly: ExportRenderer (typeof(MyEntry), typeof(MyEntryRenderer))]
namespace CustomRenderer.iOS
{
    public class MyEntryRenderer : EntryRenderer
    {
        protected override void OnElementChanged (ElementChangedEventArgs<Entry> e)
        {
            base.OnElementChanged (e);

            if (Control != null) {
                // do whatever you want to the UITextField here!
                Control.BackgroundColor = UIColor.FromRGB (204, 153, 255);
                Control.BorderStyle = UITextBorderStyle.Line;
            }
        }
    }
}

Temel sınıfın OnElementChanged yöntemine yapılan çağrı, işleyicinin Control özelliğine atanan denetime başvuruyla birlikte bir iOS UITextField denetiminin örneğini oluşturur. Ardından arka plan rengi yöntemiyle açık mor olarak UIColor.FromRGB ayarlanır.

Android'de Özel oluşturucu oluşturma

Aşağıdaki kod örneği, Android platformu için özel işleyiciyi gösterir:

using Xamarin.Forms.Platform.Android;

[assembly: ExportRenderer(typeof(MyEntry), typeof(MyEntryRenderer))]
namespace CustomRenderer.Android
{
    class MyEntryRenderer : EntryRenderer
    {
        public MyEntryRenderer(Context context) : base(context)
        {
        }

        protected override void OnElementChanged(ElementChangedEventArgs<Entry> e)
        {
            base.OnElementChanged(e);

            if (Control != null)
            {
                Control.SetBackgroundColor(global::Android.Graphics.Color.LightGreen);
            }
        }
    }
}

Temel sınıfın OnElementChanged yöntemine yapılan çağrı, işleyicinin Control özelliğine atanan denetime başvuruyla birlikte bir Android EditText denetiminin örneğini oluşturur. Ardından arka plan rengi yöntemiyle Control.SetBackgroundColor açık yeşil olarak ayarlanır.

UWP üzerinde Özel oluşturucu oluşturma

Aşağıdaki kod örneği, UWP için özel işleyiciyi gösterir:

[assembly: ExportRenderer(typeof(MyEntry), typeof(MyEntryRenderer))]
namespace CustomRenderer.UWP
{
    public class MyEntryRenderer : EntryRenderer
    {
        protected override void OnElementChanged(ElementChangedEventArgs<Entry> e)
        {
            base.OnElementChanged(e);

            if (Control != null)
            {
                Control.Background = new SolidColorBrush(Colors.Cyan);
            }
        }
    }
}

Temel sınıfın OnElementChanged yöntemine yapılan çağrı, işleyicinin Control özelliğine atanan denetime başvuruyla birlikte bir denetimin örneğini TextBox oluşturur. Ardından bir örnek oluşturularak SolidColorBrush arka plan rengi mavi olarak ayarlanır.

Özet

Bu makalede, geliştiricilerin kendi platforma özgü işlemeleriyle varsayılan yerel işlemeyi Xamarin.FormsEntry geçersiz kılmasını sağlayan denetim için özel bir denetim işleyicisinin nasıl oluşturulacağı gösterilmiştir. Özel işleyiciler, denetimlerin görünümü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.