Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Xamarin.Forms davranışlar, Behavior veya Behavior<T> sınıfından türetilerek oluşturulur. Bu makalede davranış oluşturma ve kullanma Xamarin.Forms işlemleri gösterilmektedir.
Genel bakış
Davranış oluşturma Xamarin.Forms işlemi aşağıdaki gibidir:
- veya
Behavior<T>sınıfındanBehaviordevralan bir sınıf oluşturun; buradaT, davranışın uygulanacağı denetimin türüdür. OnAttachedToGerekli kurulumu gerçekleştirmek için yöntemini geçersiz kılın.OnDetachingFromGerekli temizleme işlemlerini gerçekleştirmek için yöntemini geçersiz kılın.- Davranışın temel işlevselliğini uygulayın.
Bu, aşağıdaki kod örneğinde gösterilen yapıya neden olur:
public class CustomBehavior : Behavior<View>
{
protected override void OnAttachedTo (View bindable)
{
base.OnAttachedTo (bindable);
// Perform setup
}
protected override void OnDetachingFrom (View bindable)
{
base.OnDetachingFrom (bindable);
// Perform clean up
}
// Behavior implementation
}
Yöntem OnAttachedTo , davranış bir denetime eklendikten hemen sonra tetiklenir. Bu yöntem, eklendiği denetime bir başvuru alır ve olay işleyicilerini kaydetmek veya davranış işlevselliğini desteklemek için gereken diğer kurulumu gerçekleştirmek için kullanılabilir. Örneğin, bir denetimdeki bir olaya abone olabilirsiniz. Daha sonra davranış işlevi, olay için olay işleyicisinde uygulanır.
Davranış OnDetachingFrom denetimden kaldırıldığında yöntemi tetiklenir. Bu yöntem, eklendiği denetime bir başvuru alır ve gerekli temizleme işlemlerini gerçekleştirmek için kullanılır. Örneğin, bellek sızıntılarını önlemek için denetimdeki bir olayın aboneliğini kaldırabilirsiniz.
Daha sonra davranış, uygun denetimin koleksiyonuna Behaviors eklenerek kullanılabilir.
Xamarin.Forms 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 class NumericValidationBehavior : Behavior<Entry>
{
protected override void OnAttachedTo(Entry entry)
{
entry.TextChanged += OnEntryTextChanged;
base.OnAttachedTo(entry);
}
protected override void OnDetachingFrom(Entry entry)
{
entry.TextChanged -= OnEntryTextChanged;
base.OnDetachingFrom(entry);
}
void OnEntryTextChanged(object sender, TextChangedEventArgs args)
{
double result;
bool isValid = double.TryParse (args.NewTextValue, out result);
((Entry)sender).TextColor = isValid ? Color.Default : Color.Red;
}
}
, NumericValidationBehavior sınıfından Behavior<T> türetilir. Burada T bir Entry. OnAttachedTo yöntemi, bellek sızıntılarını önlemek için olayı kaydını TextChanged kaldırma yöntemiyle OnDetachingFrom olay için TextChanged bir olay işleyicisi kaydeder. Davranışın temel işlevselliği, kullanıcı Entrytarafından içine girilen değeri ayrıştıran ve değer bir doubledeğilse özelliğini kırmızı olarak ayarlayan TextColor yöntemi tarafından OnEntryTextChanged sağlanır.
Not
Xamarin.Forms bir davranışı ayarlamaz BindingContext çünkü davranışlar paylaşılabilir ve stiller aracılığıyla birden çok denetime uygulanabilir.
Davranış Kullanma Xamarin.Forms
Her Xamarin.Forms denetimin, aşağıdaki XAML kod örneğinde gösterildiği gibi bir veya daha fazla davranışın eklenebileceği bir Behaviors koleksiyonu vardır:
<Entry Placeholder="Enter a System.Double">
<Entry.Behaviors>
<local:NumericValidationBehavior />
</Entry.Behaviors>
</Entry>
C# ile eşdeğeri Entry aşağıdaki kod örneğinde gösterilmiştir:
var entry = new Entry { Placeholder = "Enter a System.Double" };
entry.Behaviors.Add (new NumericValidationBehavior ());
Ç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 davranışı gösterir:
Not
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 bir özel durumun ortaya alınmasına neden olur.
Xamarin.Forms Stil ile Davranış Kullanma
Davranışlar açık veya örtük bir stil tarafından da kullanılabilir. Ancak, özelliği salt okunur olduğundan denetimin özelliğini ayarlayan Behaviors bir stil oluşturmak mümkün değildir. Çözüm, davranışın eklenmesini ve kaldırılmasını denetleen davranış sınıfına ekli bir özellik eklemektir. Süreç şu şekilde ilerler:
- Davranışın ekleneceği denetime eklenmesini veya kaldırılmasını denetlemek için kullanılacak davranış sınıfına ekli bir özellik ekleyin. Ekli özelliğin, özelliğin değeri değiştiğinde yürütülecek bir
propertyChangedtemsilciyi kaydettiğinizden emin olun. - Ekli özellik için bir
staticalıcı ve ayarlayıcı oluşturun. - Davranışı eklemek ve kaldırmak için temsilciye mantık
propertyChangeduygulayın.
Aşağıdaki kod örneği, öğesinin eklenmesini ve kaldırılmasını NumericValidationBehaviordenetleen ekli bir özelliği gösterir:
public class NumericValidationBehavior : Behavior<Entry>
{
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.Behaviors.Add (new NumericValidationBehavior ());
} else {
var toRemove = entry.Behaviors.FirstOrDefault (b => b is NumericValidationBehavior);
if (toRemove != null) {
entry.Behaviors.Remove (toRemove);
}
}
}
...
}
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 değerine AttachBehavior göre denetimin davranışını ekler veya kaldırır.
Aşağıdaki kod örneği, ekli özelliği kullanan AttachBehavior ve denetimlere Entry uygulanabilen için açık bir stil NumericValidationBehavior gösterir:
<Style x:Key="NumericValidationStyle" TargetType="Entry">
<Style.Setters>
<Setter Property="local:NumericValidationBehavior.AttachBehavior" Value="true" />
</Style.Setters>
</Style>
, Style aşağıdaki kod örneğinde gösterildiği gibi işaretleme uzantısı kullanılarak StaticResource özelliğini Style örneğe ayarlayarak Style bir Entry denetime uygulanabilir:
<Entry Placeholder="Enter a System.Double" Style="{StaticResource NumericValidationStyle}">
Stiller hakkında daha fazla bilgi için bkz . Stiller.
Not
XAML'de ayarlanan veya sorgulanan bir davranışa bağlanabilir özellikler ekleyebilirsiniz, ancak bir içindeki denetimler Style ResourceDictionaryarasında paylaşılmaması gereken durumlarına sahip davranışlar oluşturursanız.
Denetimden Davranış Kaldırma
Bir OnDetachingFrom davranış bir denetimden kaldırıldığında yöntemi tetiklenir ve bellek sızıntısını önlemek için bir olaydan aboneliği kaldırma gibi gerekli temizleme işlemlerini gerçekleştirmek için kullanılır. Ancak, denetimin koleksiyonu bir Remove veya Clear yöntemi tarafından değiştirilmediği sürece Behaviors davranışlar denetimlerden örtük olarak kaldırılmaz. Aşağıdaki kod örneği, bir denetimin koleksiyonundan belirli bir davranışın kaldırılmasını Behaviors gösterir:
var toRemove = entry.Behaviors.FirstOrDefault (b => b is NumericValidationBehavior);
if (toRemove != null) {
entry.Behaviors.Remove (toRemove);
}
Alternatif olarak, aşağıdaki kod örneğinde gösterildiği gibi denetimin Behaviors koleksiyonu temizlenebilir:
entry.Behaviors.Clear();
Ayrıca, gezinti yığınından sayfalar açıldığında davranışların denetimlerden örtük olarak kaldırılmadığını unutmayın. Bunun yerine, sayfalar kapsam dışına çıkmadan önce açıkça kaldırılmalıdır.
Özet
Bu makalede davranış oluşturma ve kullanma Xamarin.Forms işlemleri gösterilmiştir. Xamarin.Formsdavranışlar veya Behavior<T> sınıfından Behavior türetilerek oluşturulur.
