Angefügte Eigenschaften

.NET Multi-Platform App UI (.NET MAUI)-angefügte Eigenschaften ermöglichen es einem Objekt, einen Wert für eine Eigenschaft zuzuweisen, die von der eigenen Klasse nicht definiert wird. Beispielsweise können untergeordnete Elemente angefügte Eigenschaften verwenden, um ihr übergeordnetes Element darüber zu informieren, wie sie auf der Benutzeroberfläche dargestellt werden sollen. Mit dem Grid Layout kann die Zeile und Spalte eines untergeordneten Elements durch Festlegen der Grid.Row und Grid.Columnangefügten Eigenschaften angegeben werden. Grid.Row und Grid.Column sind angefügte Eigenschaften, da sie für Elemente festgelegt sind, die untergeordnete Elemente eines Grid sind, statt auf Grid selbst.

Bindungsfähige Eigenschaften sollten in den folgenden Szenarien als angefügte Eigenschaften implementiert werden:

  • Wenn ein Mechanismus zum Einstellen von Eigenschaften auch für andere Klassen als die definierende Klasse verfügbar sein soll.
  • Wenn die Klasse einen Dienst darstellt, der einfach in andere Klassen integriert werden muss.

Weitere Informationen zu bindungsfähigen Eigenschaften finden Sie unter Bindungsfähige Eigenschaften.

Erstellen einer angefügten Eigenschaft

Der Prozess zum Erstellen einer angefügten Eigenschaft lautet wie folgt:

  1. Erstellen Sie eine BindableProperty Instanz mit einer der CreateAttached Methodenüberladungen.
  2. Stellen Sie staticGetEigenschaftsname und SetEigenschaftsname Methoden als Zugriffsmöglichkeiten für die angehängte Eigenschaft bereit.

Erstellen einer Eigenschaft

Beim Erstellen einer angehängten Eigenschaft zur Verwendung bei anderen Typen muss die Klasse, in der die Eigenschaft erstellt wird, nicht von BindableObject abgeleitet werden. Allerdings sollte die Ziel Eigenschaft für Zugriffe von oder abgeleitet von BindableObject sein. Weitere Informationen zu Zieleigenschaften finden Sie unter Grundlegende Bindungen.

Eine angefügte Eigenschaft kann durch Deklarieren einer public static readonly Eigenschaft vom Typ BindableProperty erstellt werden. Die bindungsfähige Eigenschaft sollte auf den zurückgegebenen Wert einer der BindableProperty.CreateAttached Methodenüberladungen festgelegt werden. Die Deklaration sollte sich im Körper der Eignerklasse, aber außerhalb von Memberdefinitionen befinden.

Wichtig

Die Namenskonvention für angehängte Eigenschaften ist, dass der Bezeichner der angehängten Eigenschaft mit dem in der CreateAttached Methode angegebenen Eigenschaftsnamen übereinstimmen muss, wobei " Eigenschaft" angehängt wird.

Der folgende Code zeigt ein Beispiel einer angefügten Eigenschaft:

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

Dadurch wird eine angefügte Eigenschaft mit dem Namen HasShadowProperty, vom Typ bool. Die Eigenschaft gehört der MyControl Klasse und hat einen Standardwert von false. Der Besitz bedeutet in diesem Fall, dass auf die Eigenschaft im XAML-Code mithilfe des Formats Type.Propertyzugegriffen wird, z. B MyControl.HasShadow.

Weitere Informationen zum Erstellen von bindungsfähigen Eigenschaften, einschließlich Parametern, die während der Erstellung angegeben werden können, finden Sie unter Erstellen einer bindungsfähigen Eigenschaft.

Erstellen von Zugriffsmethoden

Statische GetPropertyName- und Set,PropertyName Methoden sind als Zugriffsmethoden für die angefügte Eigenschaft erforderlich. Andernfalls kann das Eigenschaftensystem die angefügte Eigenschaft nicht verwenden. Die GetPropertyName Zugriffsmethode sollte der folgenden Signatur entsprechen:

public static valueType GetPropertyName(BindableObject target)

Die GetPropertyName Zugriffsmethode sollte den Wert zurückgeben, der im entsprechenden BindableProperty Feld für die angefügte Eigenschaft enthalten ist. Dies kann erreicht werden, indem man die Methode GetValue aufruft, den Bezeichner der bindbaren Eigenschaft übergibt, für die der Wert ermittelt werden soll, und dann den sich ergebenden Wert auf den erforderlichen Typ umsetzt.

Die SetPropertyName Zugriffsmethode sollte der folgenden Signatur entsprechen:

public static void SetPropertyName(BindableObject target, valueType value)

Die SetPropertyName Zugriffsmethode sollte den Wert des entsprechenden BindableProperty Felds für die angefügte Eigenschaft festlegen. Dies kann erreicht werden, indem die SetValue Methode aufgerufen und der Bezeichner für bindungsfähige Eigenschaften, für den der Wert abgerufen werden soll, und der abzurufende Wert übergeben werden.

Für beide Zugriffsmethoden sollte das Ziel objekt aus BindableObject bestehen oder davon abgeleitet sein. Weitere Informationen zu Zielobjekten finden Sie unterGrundlegende Bindungen.

Im folgenden Cocebeispiel wird der Zugriff auf die HasShadow Eigenschaft veranschaulicht:

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);
    }  
}

Verbrauchen einer angefügten Eigenschaft

Nachdem eine angefügte Eigenschaft erstellt wurde, kann sie aus XAML oder Code verwendet werden. In XAML wird dies durch die Deklaration eines Namensbereichs mit einem Präfix erreicht, wobei die Namensbereich-Deklaration den Namen des Namensbereichs der gemeinsamen Sprachlaufzeit (Common Language Runtime, CLR) und optional einen Baugruppennamen angibt. Weitere Informationen finden Sie unter XAML Namespaces.

Das folgende Beispiel veranschaulicht einen XAML-Namensbereich für einen benutzerdefinierten Typ, der eine angehängte Eigenschaft enthält, die in derselben Baugruppe definiert ist wie der Anwendungscode, der auf den benutzerdefinierten Typ verweist:

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

Die Namensbereichs-Deklaration wird dann beim Festlegen der angefügten Eigenschaft für ein bestimmtes Steuerelement verwendet, wie im folgenden XAML gezeigt:

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

Der äquivalente C#-Code ist im folgenden Codebeispiel zu sehen:

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

Verbrauchen einer angefügten Eigenschaft mit einer Formatvorlage

Angefügte Eigenschaften können auch durch eine Formatvorlage hinzugefügt werden. Das folgende XAML-Codebeispiel zeigt eine expliziten Formatvorlage für Label-Steuerelemente, die die angehängte Eigenschaft HasShadow verwendet:

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

Die Style-Klasse kann auf eine Label-Klasse angewendet werden, indem ihre Style-Eigenschaft wie im folgenden Codebeispiel gezeigt mithilfe der Markuperweiterung StaticResource für die Style-Instanz festgelegt wird:

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

Weitere Informationen zu Formatvorlagen finden Sie unter -Formatvorlagen.

Erweiterte Szenarios

Beim Erstellen einer angehängten Eigenschaft gibt es einige optionale Parameter, die eingestellt werden können, um erweiterte Szenarien für angehängte Eigenschaften zu aktivieren. Dies umfasst das Erkennen von Eigenschaftsänderungen, das Überprüfen von Eigenschaftswerten und das Erzwingung von Eigenschaftswerten. Weitere Informationen finden Sie unter Erweiterte Szenarien.