Ekli özellikler

.NET Çok Platformlu Uygulama Kullanıcı Arabirimi (.NET MAUI) ekli özellikleri, bir nesnenin kendi sınıfının tanımlamadığı bir özellik için değer atamasına olanak tanır. Örneğin, alt öğeler, üst öğelerini kullanıcı arabiriminde nasıl sunulacakları konusunda bilgilendirmek için ekli özellikleri kullanabilir. Düzen, Grid ve ekli özelliklerini ayarlayarak bir alt öğeye ait satır ve Grid.Column sütunun belirtilmesine Grid.Row olanak tanır. Grid.Row ve Grid.Column ekli özelliklerdir çünkü bunlar kendisinde değil, öğesinin Gridalt öğelerinde Grid ayarlanır.

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ı olması gerektiğinde.
  • Sınıfı, diğer sınıflarla kolayca tümleştirilmesi gereken bir hizmeti temsil ettiğinde.

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

Ekli özellik oluşturma

Ekli özellik oluşturma işlemi aşağıdaki gibidir:

  1. Yöntem aşırı yüklemelerinden CreateAttached biriyle bir BindableProperty örnek oluşturun.
  2. Ekli özellik için erişimci olarak PropertyName ve PropertyName yöntemlerini sağlayınGetstatic.Set

Özellik oluşturma

Diğer türlerde kullanılmak üzere ekli özellik oluştururken, özelliğin oluşturulduğu sınıfın öğesinden BindableObjecttüretmesi gerekmez. Bununla birlikte , erişimcilerin hedef özelliği veya türetilmesi BindableObjectgerekir. Hedef özellikler hakkında daha fazla bilgi için bkz . Temel bağlamalar.

Ekli özellik türündeki BindablePropertybir public static readonly özellik bildirilerek oluşturulabilir. Bağlanabilir özellik, yöntem aşırı yüklemelerinden BindableProperty.CreateAttached birinin döndürülen değerine ayarlanmalıdır. Bildirimi, sahip olan sınıfın gövdesinde, ancak üye tanımlarının dışında olmalıdır.

Önemli

Ekli özelliklerin adlandırma kuralı, ekli özellik tanımlayıcısının yönteminde CreateAttached belirtilen özellik adıyla eşleşmesi ve sonuna "Özellik" eklenmesi gerektiğidir.

Aşağıdaki kod ekli bir özelliğin örneğini gösterir:

public class MyControl
{
    public static readonly BindableProperty HasShadowProperty =
        BindableProperty.CreateAttached("HasShadow", typeof(bool), typeof(MyControl), false);
}

Bu, türünde booladlı HasShadowPropertyekli bir özellik oluşturur. özelliği sınıfına MyControl aittir ve varsayılan değerine falsesahiptir. Bu durumda sahiplik, özelliğine XAML'de örneğin biçimini Type.PropertyMyControl.HasShadowkullanarak erişileceği anlamına gelir.

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

Erişimci oluşturma

Static GetPropertyName ve SetPropertyName yöntemleri ekli özellik için erişimci olarak gereklidir, aksi takdirde özellik sistemi ekli özelliği kullanamaz. GetPropertyName erişimcisi aşağıdaki imzaya uygun olmalıdır:

public static valueType GetPropertyName(BindableObject target)

GetPropertyName erişimcisi, ekli özelliğin karşılık gelen BindableProperty alanında bulunan değeri döndürmelidir. Bu, yöntemini çağırarak GetValue , değerin alınacağı bağlanabilir özellik tanımlayıcısını geçirerek ve ardından sonuçta elde edilen değeri gerekli türe dönüştürerek gerçekleştirilebilir.

SetPropertyName erişimcisi aşağıdaki imzaya uygun olmalıdır:

public static void SetPropertyName(BindableObject target, valueType value)

SetPropertyName erişimcisi, ekli özellik için karşılık gelen BindableProperty alanın değerini ayarlamalıdır. Bu, yöntemi çağrılarak SetValue , değerin ayarlanacağı bağlanabilir özellik tanımlayıcısı ve ayarlanacak değer geçirilerek gerçekleştirilebilir.

Her iki erişimci için de hedef nesnenin öğesi olması veya öğesinden BindableObjecttüretilmesi gerekir. Hedef nesneler hakkında daha fazla bilgi için bkz . Temel bağlamalar.

Aşağıdaki kod örneği, ekli özelliğin HasShadow erişimcilerini gösterir:

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

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

Ekli özelliği kullanma

Ekli bir özellik oluşturulduktan sonra XAML veya koddan kullanılabilir. XAML'de bu, ortak dil çalışma zamanı (CLR) ad alanı adını ve isteğe bağlı olarak bir derleme adını belirten ad alanı bildirimiyle ön ekli bir ad alanı bildirilerek elde edilir. Daha fazla bilgi için bkz . XAML Ad Alanları.

Aşağıdaki örnekte, özel türe başvuran uygulama koduyla aynı derleme içinde tanımlanan ekli bir özellik içeren özel tür için bir XAML ad alanı gösterilmektedir:

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

Ad alanı bildirimi, aşağıdaki XAML'de gösterildiği gibi belirli bir denetimde ekli özelliği ayarlarken kullanılır:

<Label Text="Label with shadow" local:MyControl.HasShadow="true" />

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

Label label = new Label { Text = "Label with shadow" };
MyControl.SetHasShadow (label, true);

Ekli özelliği stille kullanma

Ekli özellikler, bir stile göre denetime de eklenebilir. Aşağıdaki XAML kodu örneği, ekli özelliği kullanan HasShadow denetimler için Label açık bir stil gösterir:

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

, Style aşağıdaki kod örneğinde gösterildiği gibi işaretleme uzantısını kullanarak StaticResource özelliğini Style örneğe ayarlayarak Style öğesine uygulanabilirLabel:

<Label Text="Label with shadow" Style="{StaticResource ShadowStyle}" />

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

Gelişmiş senaryolar

Ekli özellik oluştururken, gelişmiş ekli özellik senaryolarını etkinleştirmek için ayarlanabilen bazı isteğe bağlı parametreler vardır. Bu özellik değişikliklerini algılamayı, özellik değerlerini doğrulamayı ve özellik değerlerini zorlamayı içerir. Daha fazla bilgi için bkz . Gelişmiş senaryolar.