Jak zarejestrować dołączoną właściwość (WPF .NET)
W tym artykule opisano sposób rejestrowania dołączonej właściwości i udostępniania publicznych metod dostępu, które umożliwiają dostęp do dołączonej właściwości za pomocą języka Extensible Application Markup Language (XAML) i kodu. Dołączone właściwości umożliwiają ustawianie dodatkowych par właściwości/wartości dla dowolnego elementu XAML, mimo że element nie definiuje tych dodatkowych właściwości w modelu obiektów. Dodatkowe właściwości są dostępne globalnie. Dołączone właściwości są zwykle definiowane jako wyspecjalizowana forma właściwości zależności, która nie ma konwencjonalnego opakowania właściwości. Większość dołączonych właściwości dla typów WPF (Windows Presentation Foundation) jest również implementowana jako właściwości zależności. Właściwości zależności można tworzyć dla dowolnego typu pochodnego DependencyObject.
Przykład
W poniższym przykładzie pokazano, jak zarejestrować dołączoną właściwość jako właściwość zależności przy użyciu metody RegisterAttached. Klasa dostawcy ma możliwość określenia wartości domyślnej w metadanych właściwości. Aby uzyskać więcej informacji na temat metadanych właściwości, zobacz Metadane właściwości zależności. W tym przykładzie właściwość HasFish
ma typ wartości Boolean z wartością domyślną ustawioną na false
.
Klasa dostawcy dla dołączonej właściwości musi zawierać statyczne akcesory get/set, które są zgodne z konwencją nazewnictwa Get<property name>
i Set<property name>
. Czytnik XAML używa metod dostępu do identyfikowania atrybutu XAML dla dołączonej właściwości i przypisania jej wartości do odpowiedniego typu. Te metody dostępu są niezbędne, nawet jeśli dołączona właściwość nie jest zarejestrowana jako właściwość zależności.
public class Aquarium : UIElement
{
// Register an attached dependency property with the specified
// property name, property type, owner type, and property metadata.
public static readonly DependencyProperty HasFishProperty =
DependencyProperty.RegisterAttached(
"HasFish",
typeof(bool),
typeof(Aquarium),
new FrameworkPropertyMetadata(defaultValue: false,
flags: FrameworkPropertyMetadataOptions.AffectsRender)
);
// Declare a get accessor method.
public static bool GetHasFish(UIElement target) =>
(bool)target.GetValue(HasFishProperty);
// Declare a set accessor method.
public static void SetHasFish(UIElement target, bool value) =>
target.SetValue(HasFishProperty, value);
}
Public Class Aquarium
Inherits UIElement
' Register an attached dependency property with the specified
' property name, property type, owner type, and property metadata.
Public Shared ReadOnly HasFishProperty As DependencyProperty =
DependencyProperty.RegisterAttached("HasFish", GetType(Boolean), GetType(Aquarium),
New FrameworkPropertyMetadata(defaultValue:=False,
flags:=FrameworkPropertyMetadataOptions.AffectsRender))
' Declare a get accessor method.
Public Shared Function GetHasFish(target As UIElement) As Boolean
Return target.GetValue(HasFishProperty)
End Function
' Declare a set accessor method.
Public Shared Sub SetHasFish(target As UIElement, value As Boolean)
target.SetValue(HasFishProperty, value)
End Sub
End Class
Zobacz też
.NET Desktop feedback