Como adicionar um tipo de proprietário para uma propriedade de dependência
Este exemplo mostra como adicionar uma classe como um proprietário de uma propriedade de dependência registrado para um tipo diferente. Ao fazer isso, o leitor XAML do WPF e o sistema de propriedades são capazes de reconhecer a classe como um proprietário adicional da propriedade. Adicionar como proprietário opcionalmente permite que a classe de adição forneça os metadados específicos do tipo.
No exemplo a seguir, StateProperty
é uma propriedade registrada pela classe MyStateControl
. A classe UnrelatedStateControl
adiciona-se como um proprietário do StateProperty
usando o AddOwner método, especificamente usando a assinatura que permite novos metadados para a propriedade de dependência como ela existe no tipo de adição. Observe que você deve fornecer acessadores CLR (Common Language Runtime) para a propriedade semelhante ao exemplo mostrado no exemplo Implementar uma propriedade de dependência, bem como expor novamente o identificador de propriedade de dependência na classe que está sendo adicionada como proprietário.
Sem wrappers, a propriedade de dependência ainda funcionaria da perspectiva do acesso programático usando GetValue ou SetValue. Mas você normalmente deseja paralelizar esse comportamento do sistema de propriedades com os wrappers de propriedade CLR. Os wrappers facilitam a definição da propriedade de dependência programaticamente e tornam possível definir as propriedades como atributos XAML.
Para saber como substituir metadados padrão, consulte Substituir metadados para uma propriedade de dependência.
Exemplo
public class MyStateControl : ButtonBase
{
public MyStateControl() : base() { }
public Boolean State
{
get { return (Boolean)this.GetValue(StateProperty); }
set { this.SetValue(StateProperty, value); }
}
public static readonly DependencyProperty StateProperty = DependencyProperty.Register(
"State", typeof(Boolean), typeof(MyStateControl),new PropertyMetadata(false));
}
Public Class MyStateControl
Inherits ButtonBase
Public Sub New()
MyBase.New()
End Sub
Public Property State() As Boolean
Get
Return CType(Me.GetValue(StateProperty), Boolean)
End Get
Set(ByVal value As Boolean)
Me.SetValue(StateProperty, value)
End Set
End Property
Public Shared ReadOnly StateProperty As DependencyProperty = DependencyProperty.Register("State", GetType(Boolean), GetType(MyStateControl),New PropertyMetadata(False))
End Class
public class UnrelatedStateControl : Control
{
public UnrelatedStateControl() { }
public static readonly DependencyProperty StateProperty = MyStateControl.StateProperty.AddOwner(typeof(UnrelatedStateControl), new PropertyMetadata(true));
public Boolean State
{
get { return (Boolean)this.GetValue(StateProperty); }
set { this.SetValue(StateProperty, value); }
}
}
Public Class UnrelatedStateControl
Inherits Control
Public Sub New()
End Sub
Public Shared ReadOnly StateProperty As DependencyProperty = MyStateControl.StateProperty.AddOwner(GetType(UnrelatedStateControl), New PropertyMetadata(True))
Public Property State() As Boolean
Get
Return CType(Me.GetValue(StateProperty), Boolean)
End Get
Set(ByVal value As Boolean)
Me.SetValue(StateProperty, value)
End Set
End Property
End Class
Confira também
.NET Desktop feedback
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de