Yeniden kullanılabilir EffectBehavior

Davranışlar, bir denetime efekt eklemek, arka kod arkası dosyalarından kod işleme kodunu kaldırmak için kullanışlı bir yaklaşımdır. Bu makalede, denetime Xamarin.Forms efekt eklemek için davranış oluşturma ve kullanma işlemleri gösterilmektedir.

Genel bakış

sınıfıEffectBehavior, bir denetime davranış eklendiğinde bir Effect örneği denetime ekleyen ve davranış denetimden ayrıldığında örneği kaldıran Effect yeniden kullanılabilir Xamarin.Forms bir özel davranıştır.

Aşağıdaki davranış özellikleri, davranışı kullanacak şekilde ayarlanmalıdır:

Efektler hakkında daha fazla bilgi için bkz . Efektler.

Not

EffectBehavior, örneğinde bulunabilen özel bir sınıftır ve öğesinin Xamarin.Formsbir parçası değildir.

Davranış Oluşturma

sınıfı EffectBehavior sınıfından Behavior<T> türetilir. Burada T bir View. Bu, sınıfın EffectBehavior herhangi bir Xamarin.Forms denetime eklenebileceği anlamına gelir.

Bağlanabilir Özellikleri Uygulama

EffectBehavior sınıfı, davranış denetime eklendiğinde denetime bir Effect eklemek için kullanılan iki BindableProperty örneği tanımlar. Bu özellikler aşağıdaki kod örneğinde gösterilmiştir:

public class EffectBehavior : Behavior<View>
{
  public static readonly BindableProperty GroupProperty =
    BindableProperty.Create ("Group", typeof(string), typeof(EffectBehavior), null);
  public static readonly BindableProperty NameProperty =
    BindableProperty.Create ("Name", typeof(string), typeof(EffectBehavior), null);

  public string Group {
    get { return (string)GetValue (GroupProperty); }
    set { SetValue (GroupProperty, value); }
  }

  public string Name {
    get { return(string)GetValue (NameProperty); }
    set { SetValue (NameProperty, value); }
  }
  ...
}

EffectBehavior kullanıldığında, Group özelliği efektin özniteliğinin ResolutionGroupName değerine ayarlanmalıdır. Ayrıca özelliği, Name efekt sınıfı için özniteliğinin ExportEffect değerine ayarlanmalıdır.

Geçersiz Kılmaları Uygulama

sınıfı, EffectBehavior aşağıdaki kod örneğinde gösterildiği gibi sınıfın ve OnDetachingFrom yöntemlerini Behavior<T> geçersiz kılarOnAttachedTo:

public class EffectBehavior : Behavior<View>
{
  ...
  protected override void OnAttachedTo (BindableObject bindable)
  {
    base.OnAttachedTo (bindable);
    AddEffect (bindable as View);
  }

  protected override void OnDetachingFrom (BindableObject bindable)
  {
    RemoveEffect (bindable as View);
    base.OnDetachingFrom (bindable);
  }
  ...
}

OnAttachedTo yöntemi, ekli denetimi parametre olarak geçirerek yöntemini çağırarak AddEffect kurulumu gerçekleştirir. OnDetachingFrom yöntemi, ekli denetimi parametre olarak geçirerek yöntemini çağırarak RemoveEffect temizleme gerçekleştirir.

Davranış İşlevselliğini Uygulama

Davranışın amacı, davranış denetime eklendiğinde ve özelliklerinde Group tanımlanan öğesini bir denetime eklemek Effect ve davranış denetimden ayrıldığında öğesini kaldırmaktırEffect.Name Temel davranış işlevi aşağıdaki kod örneğinde gösterilmiştir:

public class EffectBehavior : Behavior<View>
{
  ...
  void AddEffect (View view)
  {
    var effect = GetEffect ();
    if (effect != null) {
      view.Effects.Add (GetEffect ());
    }
  }

  void RemoveEffect (View view)
  {
    var effect = GetEffect ();
    if (effect != null) {
      view.Effects.Remove (GetEffect ());
    }
  }

  Effect GetEffect ()
  {
    if (!string.IsNullOrWhiteSpace (Group) && !string.IsNullOrWhiteSpace (Name)) {
      return Effect.Resolve (string.Format ("{0}.{1}", Group, Name));
    }
    return null;
  }
}

AddEffect yöntemi, denetime iliştirilene EffectBehavior yanıt olarak yürütülür ve ekli denetimi parametre olarak alır. Yöntemi daha sonra alınan efekti denetimin Effects koleksiyonuna ekler. RemoveEffect yöntemi, denetimden ayrılmaya EffectBehavior yanıt olarak yürütülür ve ekli denetimi parametre olarak alır. Yöntemi daha sonra efekti denetimin Effects koleksiyonundan kaldırır.

GetEffect yöntemi yöntemini Effect.Resolve kullanarak öğesini Effectalır. Etki, ve Name özellik değerlerinin birleştirilmiş bir şekilde Group bulunur. Bir platform etkiyi sağlamazsa, Effect.Resolve yöntem değer olmayannull bir değer döndürür.

Davranışı Kullanma

Sınıfı EffectBehavior , aşağıdaki XAML kod örneğinde gösterildiği gibi bir denetimin koleksiyonuna eklenebilir Behaviors :

<Label Text="Label Shadow Effect" ...>
  <Label.Behaviors>
    <local:EffectBehavior Group="Xamarin" Name="LabelShadowEffect" />
  </Label.Behaviors>
</Label>

Eşdeğer C# kodu aşağıdaki kod örneğinde gösterilmiştir:

var label = new Label {
  Text = "Label Shadow Effect",
  ...
};
label.Behaviors.Add (new EffectBehavior {
  Group = "Xamarin",
  Name = "LabelShadowEffect"
});

Davranışın Group ve Name özellikleri, platforma özgü her projedeki efekt sınıfı için ve ExportEffect özniteliklerinin değerlerine ResolutionGroupName ayarlanır.

Çalışma zamanında, davranış denetime Label eklendiğinde, Xamarin.LabelShadowEffect denetimin Effects koleksiyonuna eklenir. Bu, aşağıdaki ekran görüntülerinde gösterildiği gibi denetim tarafından görüntülenen metne Label gölge eklenmesine neden olur:

EffectsBehavior ile Örnek Uygulama

Bu davranışı kullanarak denetimlerden etki ekleme ve kaldırma avantajı, kazan plakası efekt işleme kodunun arka planda kod dosyalarından kaldırılabilmesidir.

Özet

Bu makalede, denetime efekt eklemek için bir davranış kullanıldığı gösterilmiştir. sınıfıEffectBehavior, bir denetime davranış eklendiğinde bir Effect örneği denetime ekleyen ve davranış denetimden ayrıldığında örneği kaldıran Effect yeniden kullanılabilir Xamarin.Forms bir özel davranıştır.