İliştirilmiş Özellikler

Örnek indir Örneği indirin

İliştirilmiş özellikler, bir nesnenin kendi sınıfının tanımlamayan bir özellik için değer atamasını sağlar. Örneğin, alt öğeler, kendi üst öğelerini Kullanıcı arabiriminde nasıl sunulduğunu bilgilendirmek için iliştirilmiş özellikleri kullanabilir. GridDenetim, Grid.Row ve ekli özellikler ayarlanarak bir alt öğenin satır ve sütununun belirtilmesini sağlar Grid.Column . Grid.Row ve, Grid.Column öğesinin kendisi yerine bir alt öğesi olan öğeler üzerinde ayarlandığı için iliştirilmiş özelliklerdir GridGrid .

Bağlanabilir özellikler, aşağıdaki senaryolarda Ekli Özellikler olarak uygulanmalıdır:

  • Tanımlama sınıfı dışındaki sınıflar için kullanılabilir bir özellik ayarı mekanizmasına ihtiyaç vardır.
  • Sınıfı, diğer sınıflarla kolayca tümleştirililmesi gereken bir hizmeti temsil ettiğinde.

Bağlanabilir özellikler hakkında daha fazla bilgi için bkz. bağlanabilir Özellikler.

İliştirilmiş özellik oluşturma

İliştirilmiş özelliği oluşturma işlemi aşağıdaki gibidir:

  1. BindablePropertyYöntem aşırı yüklerini içeren bir örnek oluşturun CreateAttached .
  2. staticGetstaticSet Eklenmiş özellik için PropertyName ve Get yöntemlerini erişimciler olarak sağlayın.

Özellik Oluştur

Diğer türlerde kullanılmak üzere iliştirilmiş bir özellik oluştururken, özelliğin oluşturulduğu sınıfın türetilmesi gerekmez BindableObject . Ancak, erişimciler için target özelliği, veya öğesinden türemelidir .

İliştirilmiş bir özellik, türünde bir özellik bildirerek oluşturulabilir public static readonlyBindableProperty . Bağlanabilir özellik, Xamarin_Forms _BindableProperty_CreateAttached_System_String_System_Type_System_Type_System_Object_ Xamarin_Forms _bindingmode_ Xamarin_Forms _BindableProperty_ValidateValueDelegate_ Xamarin_Forms _BindableProperty_BindingPropertyChangedDelegate_ Xamarin_Forms _BindableProperty_BindingPropertyChangingDelegate_ Xamarin_Forms _BindableProperty_CoerceValueDelegate_ _BindableProperty_CreateDefaultValueDelegate_ Xamarin_Forms "Data-LinkType =" olarak döndürülen değeri olarak ayarlanmalıdır mutlak yol ">BindableProperty.CreateAttached yöntemi aşırı yüklemeleri. Bildirim, sahip olan sınıfın gövdesinde, ancak herhangi bir üye tanımının dışında olmalıdır.

Önemli

İliştirilmiş özellikler için adlandırma kuralı, iliştirilmiş özellik tanımlayıcısının, yöntemde belirtilen özellik adıyla eşleşmesi gerekir CreateAttached , buna "Property" eklenir.

Aşağıdaki kod, ekli özelliğe bir örnek gösterir:

public static readonly BindableProperty HasShadowProperty =
  BindableProperty.CreateAttached ("HasShadow", typeof(bool), typeof(ShadowEffect), false);

Bu, türünde adlı iliştirilmiş bir özellik oluşturur HasShadowPropertybool . Özelliği ShadowEffect sınıfına aittir ve varsayılan değerine sahiptir false .

Oluşturma sırasında belirtilenebilir parametreler dahil olmak üzere bağlanabilir özellikler oluşturma hakkında daha fazla bilgi için bkz. bağlanabilir Özellik oluşturma.

Erişimcileri oluştur

Static GetGet ve SetSet yöntemleri, ekli özelliğe yönelik erişimciler olarak gereklidir, aksi takdirde özellik sistemi ekli özelliği kullanamaz. GetGet erişimcisi aşağıdaki imzaya uymalıdır:

public static valueType GetPropertyName(BindableObject target)

GetGet erişimcisi, BindableProperty ekli özellik için karşılık gelen alanda bulunan değeri döndürmelidir. Bu, Xamarin_Forms _BindableObject_GetValue_ Xamarin_Forms _bindavbleproperty_ "Data-LinkType =" Absolute-path ">GetValue yöntemi çağırarak, değerin alınacağı bağlanabilir özellik tanımlayıcısını geçirerek ve sonra elde edilen değeri gerekli türe dönüştürerek elde edilebilir.

SetSet erişimcisi aşağıdaki imzaya uymalıdır:

public static void SetPropertyName(BindableObject target, valueType value)

SetSet erişimcisi BindableProperty iliştirilmiş özellik için karşılık gelen alanın değerini ayarladı. Bu, Xamarin_Forms _BindableObject_SetValue_ Xamarin_Forms _BindableProperty_System_Object_ "Data-LinkType =" Absolute-path ">SetValue yöntemi çağırarak, değeri ayarlanacak bağlanabilir özellik tanımlayıcısı ve ayarlanacak değer aracılığıyla elde edilebilir.

Her iki erişimci için de hedef nesne, veya ' den türetilmelidir .

Aşağıdaki kod örneği iliştirilmiş özelliği için erişimcileri gösterir HasShadow :

public static bool GetHasShadow (BindableObject view)
{
  return (bool)view.GetValue (HasShadowProperty);
}

public static void SetHasShadow (BindableObject view, bool value)
{
  view.SetValue (HasShadowProperty, value);
}

İliştirilmiş bir özelliği kullanma

İliştirilmiş bir özellik oluşturulduktan sonra XAML veya koddan tüketilebilir. XAML 'de, bu, ortak dil çalışma zamanı (CLR) ad alanı adını ve isteğe bağlı olarak bir derleme adını belirten bir ön ek içeren bir ad alanı bildirimi ile elde edilir. Daha fazla bilgi için bkz. xaml ad alanları.

Aşağıdaki kod örneği, özel türe başvuran uygulama kodu ile aynı derlemede tanımlanmış olan iliştirilmiş özelliği içeren özel bir tür için XAML ad alanını gösterir:

<ContentPage ... xmlns:local="clr-namespace:EffectsDemo" ...>
  ...
</ContentPage>

Daha sonra, aşağıdaki XAML kod örneğinde gösterildiği gibi, belirli bir denetimde ekli özelliği ayarlarken ad alanı bildirimi kullanılır:

<Label Text="Label Shadow Effect" local:ShadowEffect.HasShadow="true" />

Benzer C# kodu aşağıdaki kod örneğinde gösterilmektedir:

var label = new Label { Text = "Label Shadow Effect" };
ShadowEffect.SetHasShadow (label, true);

Ekli bir özelliği stil ile kullanma

Eklenmiş özellikler, bir stile göre denetime de eklenebilir. Aşağıdaki XAML kod örneği, denetimlere uygulanabilen ekli özelliği kullanan açık bir stil gösterir Label :

<Style x:Key="ShadowEffectStyle" TargetType="Label">
  <Style.Setters>
    <Setter Property="local:ShadowEffect.HasShadow" Value="true" />
  </Style.Setters>
</Style>

, StyleLabelStyleStyleStyleStaticResource Aşağıdaki kod örneğinde gösterildiği gibi, Xamarin_Forms _NavigableElement_Style "Data-LinkType =" Absolute-path ">özelliği, biçimlendirme uzantısı kullanılarak örneğe ayarlanarak uygulanabilir:

<Label Text="Label Shadow Effect" Style="{StaticResource ShadowEffectStyle}" />

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

Gelişmiş senaryolar

İliştirilmiş bir özellik oluştururken, gelişmiş Ekli Özellik senaryolarını etkinleştirmek üzere ayarlanabilir bir dizi isteğe bağlı parametre vardır. Bu özellik değişikliklerini algılamayı, özellik değerlerini doğrulamayı ve zorlama özellik değerlerini içerir. Daha fazla bilgi için bkz. Gelişmiş senaryolar.