Aracılığıyla paylaş


Ekli Davranışlar

Ekli davranışlar, bir veya daha fazla ekli özelliğe sahip statik sınıflardır. Bu makalede ekli davranışların nasıl oluşturulacağı ve tüketilir gösterilmektedir.

Genel bakış

Ekli özellik, özel bir bağlanabilir özellik türüdür. Bunlar bir sınıfta tanımlanır, ancak diğer nesnelere eklenir ve XAML'de bir sınıf ve noktayla ayrılmış bir özellik adı içeren öznitelikler olarak tanınabilir.

Ekli bir özellik, özelliğin değeri değiştiğinde (örneğin, özelliğin bir denetimde ayarlandığı zaman) yürütülecek bir temsilci tanımlayabilir propertyChanged . propertyChanged Temsilci yürütürken, eklendiği denetime ve özelliğin eski ve yeni değerlerini içeren parametrelere bir başvuru geçirilir. Bu temsilci, geçirilen başvuruyu aşağıdaki gibi düzenleyerek özelliğin eklendiği denetime yeni işlevler eklemek için kullanılabilir:

  1. Temsilci propertyChanged , olarak alınan BindableObjectdenetim başvuruyu, davranışın geliştirmek üzere tasarlandığı denetim türüne yazar.
  2. Temsilci propertyChanged denetimin özelliklerini değiştirir, denetimin yöntemlerini çağırır veya temel davranış işlevselliğini uygulamak için denetimin kullanıma sunduğu olaylar için olay işleyicilerini kaydeder.

Ekli davranışlarla ilgili bir sorun, bunların özellikler ve yöntemlerle static bir static sınıfta tanımlanmasıdır. Bu durum içeren ekli davranışlar oluşturmayı zorlaştırır. Ayrıca davranışlar, Xamarin.Forms davranış oluşturmada tercih edilen yaklaşım olarak ekli davranışların yerini aldı. Davranışlar hakkında Xamarin.Forms daha fazla bilgi için bkz Xamarin.Forms . Davranışlar.

Ekli Davranış Oluşturma

Örnek uygulama, kullanıcı tarafından kırmızı renkli bir Entry denetime girilen değeri (değilse) vurgulayan bir doublegösterirNumericValidationBehavior. Davranış aşağıdaki kod örneğinde gösterilmiştir:

public static class NumericValidationBehavior
{
    public static readonly BindableProperty AttachBehaviorProperty =
        BindableProperty.CreateAttached (
            "AttachBehavior",
            typeof(bool),
            typeof(NumericValidationBehavior),
            false,
            propertyChanged:OnAttachBehaviorChanged);

    public static bool GetAttachBehavior (BindableObject view)
    {
        return (bool)view.GetValue (AttachBehaviorProperty);
    }

    public static void SetAttachBehavior (BindableObject view, bool value)
    {
        view.SetValue (AttachBehaviorProperty, value);
    }

    static void OnAttachBehaviorChanged (BindableObject view, object oldValue, object newValue)
    {
        var entry = view as Entry;
        if (entry == null) {
            return;
        }

        bool attachBehavior = (bool)newValue;
        if (attachBehavior) {
            entry.TextChanged += OnEntryTextChanged;
        } else {
            entry.TextChanged -= OnEntryTextChanged;
        }
    }

    static void OnEntryTextChanged (object sender, TextChangedEventArgs args)
    {
        double result;
        bool isValid = double.TryParse (args.NewTextValue, out result);
        ((Entry)sender).TextColor = isValid ? Color.Default : Color.Red;
    }
}

sınıfıNumericValidationBehavior, eklendiği denetime davranışın eklenmesini veya kaldırılmasını denetleyen bir alıcı ve ayarlayıcı ile static adlı AttachBehavior bir ekli özellik içerir. Bu ekli özellik, özelliğin OnAttachBehaviorChanged değeri değiştiğinde yürütülecek yöntemi kaydeder. Bu yöntem, ekli özelliğin TextChanged değerine göre olay için bir olay işleyicisini AttachBehavior kaydeder veya kaydını geri alır. Davranışın temel işlevselliği, kullanıcı tarafından OnEntryTextChanged içine girilen Entry değeri ayrıştıran ve değer bir doubledeğilse özelliğini kırmızı olarak ayarlayan TextColor yöntemi tarafından sağlanır.

Ekli Davranış Kullanma

Sınıfı, NumericValidationBehavior aşağıdaki XAML kod örneğinde gösterildiği gibi ekli özelliği bir Entry denetime eklenerek AttachBehavior kullanılabilir:

<ContentPage ... xmlns:local="clr-namespace:WorkingWithBehaviors;assembly=WorkingWithBehaviors" ...>
    ...
    <Entry Placeholder="Enter a System.Double" local:NumericValidationBehavior.AttachBehavior="true" />
    ...
</ContentPage>

C# ile eşdeğeri Entry aşağıdaki kod örneğinde gösterilmiştir:

var entry = new Entry { Placeholder = "Enter a System.Double" };
NumericValidationBehavior.SetAttachBehavior (entry, true);

Çalışma zamanında davranış, davranış uygulamasına göre denetimle etkileşime yanıt verir. Aşağıdaki ekran görüntüleri, geçersiz girişe yanıt veren ekli davranışı gösterir:

Ekli Davranışa Sahip Örnek Uygulama

Not

Ekli davranışlar belirli bir denetim türü (veya birçok denetime uygulanabilen bir üst sınıf) için yazılır ve yalnızca uyumlu bir denetime eklenmelidir. Uyumsuz bir denetime davranış eklemeye çalışmak bilinmeyen davranışa neden olur ve davranış uygulamasına bağlıdır.

Denetimden Ekli Davranışı Kaldırma

Sınıfı, NumericValidationBehavior aşağıdaki XAML kod örneğinde gösterildiği gibi ekli özelliği olarak falseayarlanarak AttachBehavior bir denetimden kaldırılabilir:

<Entry Placeholder="Enter a System.Double" local:NumericValidationBehavior.AttachBehavior="false" />

C# ile eşdeğeri Entry aşağıdaki kod örneğinde gösterilmiştir:

var entry = new Entry { Placeholder = "Enter a System.Double" };
NumericValidationBehavior.SetAttachBehavior (entry, false);

Çalışma zamanında, OnAttachBehaviorChanged ekli özelliğin AttachBehavior değeri olarak ayarlandığında falseyöntemi yürütülür. Yöntemi OnAttachBehaviorChanged daha sonra olay için olay işleyicisinin TextChanged kaydını kaldırarak kullanıcı denetimle etkileşim kurarken davranışın yürütülmediğine emin olur.

Özet

Bu makalede ekli davranışların nasıl oluşturulacağı ve tüketilir gösterilmiştir. Ekli davranışlar, bir veya daha fazla ekli özelliğe sahip sınıflardır static .