Jak zaimplementować właściwość zależności (WPF .NET)
W tym artykule opisano sposób implementowania właściwości zależności przy użyciu pola DependencyProperty do tworzenia kopii zapasowej właściwości środowiska uruchomieniowego języka wspólnego (CLR). Właściwości zależności obsługują kilka zaawansowanych funkcji systemu właściwości Windows Presentation Foundation (WPF). Te funkcje obejmują style, powiązanie danych, dziedziczenie, animację i wartości domyślne. Jeśli chcesz zdefiniować właściwości do obsługi tych funkcji, zaimplementuj właściwości jako właściwość zależności.
Przykład
W poniższym przykładzie pokazano, jak zarejestrować właściwość zależności, wywołując metodę Register. Metoda Register
zwraca wystąpienie DependencyProperty nazywane identyfikatorem właściwości zależności . Identyfikator jest przechowywany w polu static readonly
i zawiera nazwę i cechy właściwości zależności.
Pole identyfikatora musi być zgodne z konwencją nazewnictwa <property name>Property
. Jeśli na przykład zarejestrujesz właściwość zależności o nazwie Location
, pole identyfikatora powinno mieć nazwę LocationProperty
. Jeśli nie uda Ci się przestrzegać tego wzorca nazewnictwa, projektanci WPF mogą nie zgłaszać prawidłowo Twojej właściwości, a niektóre aspekty systemowego stylu aplikacji właściwości mogą nie działać zgodnie z oczekiwaniami.
W poniższym przykładzie nazwa właściwości zależności, a jej akcesor CLR jest HasFish
, więc pole identyfikatora ma nazwę HasFishProperty
. Typ właściwości zależności to Boolean, a typ właściciela rejestrujący właściwość zależności jest Aquarium
.
Dla właściwości zależności można określić domyślne metadanych. W tym przykładzie ustawiono wartość domyślną false
dla właściwości zależności HasFish
.
public class Aquarium : DependencyObject
{
public static readonly DependencyProperty HasFishProperty =
DependencyProperty.Register(
name: "HasFish",
propertyType: typeof(bool),
ownerType: typeof(Aquarium),
typeMetadata: new FrameworkPropertyMetadata(defaultValue: false));
public bool HasFish
{
get => (bool)GetValue(HasFishProperty);
set => SetValue(HasFishProperty, value);
}
}
Public Class Aquarium
Inherits DependencyObject
Public Shared ReadOnly HasFishProperty As DependencyProperty =
DependencyProperty.Register(
name:="HasFish",
propertyType:=GetType(Boolean),
ownerType:=GetType(Aquarium),
typeMetadata:=New FrameworkPropertyMetadata(defaultValue:=False))
Public Property HasFish As Boolean
Get
Return GetValue(HasFishProperty)
End Get
Set(value As Boolean)
SetValue(HasFishProperty, value)
End Set
End Property
End Class
Aby uzyskać więcej informacji na temat sposobu oraz powodów, dla których warto zaimplementować właściwość zależności, zamiast wspierać właściwość CLR za pomocą pola prywatnego, zobacz Właściwości zależności — omówienie.
Zobacz też
.NET Desktop feedback