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:
- Temsilci
propertyChanged
, olarak alınanBindableObject
denetim başvuruyu, davranışın geliştirmek üzere tasarlandığı denetim türüne yazar. - 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 double
gö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 double
değ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:
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 false
ayarlanarak 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 false
yö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
.