Como registrar uma propriedade anexada (WPF .NET)
Este artigo descreve como registrar uma propriedade anexada e fornecer acessadores públicos que permitem acessar a propriedade anexada por meio de XAML (Extensible Application Markup Language) e código. As propriedades anexadas permitem que pares de propriedade/valor extras sejam definidos em qualquer elemento XAML, mesmo que o elemento não defina essas propriedades extras em seu modelo de objeto. As propriedades extras são acessíveis globalmente. As propriedades anexadas normalmente são definidas como uma forma especializada de propriedade de dependência que não tem um wrapper de propriedade convencional. A maioria das propriedades anexadas para tipos Windows Presentation Foundation (WPF) também são implementadas como propriedades de dependência. Você pode criar propriedades de dependência em qualquer DependencyObject tipo derivado.
Exemplo
O exemplo a seguir mostra como registrar uma propriedade anexada como uma propriedade de dependência, usando o RegisterAttached método. A classe de provedor tem a opção de especificar um valor padrão nos metadados da propriedade. Para obter mais informações sobre metadados de propriedade, consulte Metadados de propriedade de dependência. Neste exemplo, a HasFish
propriedade tem um tipo de Boolean valor, com seu valor padrão definido como false
.
A classe de provedor para uma propriedade anexada deve fornecer métodos de acessador get/set estáticos que sigam a convenção Get<property name>
de nomenclatura e Set<property name>
. O leitor XAML usa os acessadores para reconhecer o atributo XAML para a propriedade anexada e resolver seu valor para o tipo apropriado. Esses acessadores são necessários mesmo que uma propriedade anexada não esteja registrada como uma propriedade de dependência.
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
Confira também
.NET Desktop feedback