Compartilhar via


DependencyProperty Classe

Definição

Representa uma propriedade de dependência registrada com o sistema de propriedades de dependência. As propriedades de dependência dão suporte para expressões de valor, associação de dados, animação e notificação de alteração de propriedade. Para obter mais informações sobre como os valores de DependencyProperty servem como identificadores para propriedades de dependência, consulte Visão geral das propriedades de dependência.

public ref class DependencyProperty sealed
/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.UniversalApiContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
class DependencyProperty final
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.UniversalApiContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
public sealed class DependencyProperty
Public NotInheritable Class DependencyProperty
See Remarks
Herança
Object Platform::Object IInspectable DependencyProperty
Atributos

Requisitos do Windows

Família de dispositivos
Windows 10 (introduzida na 10.0.10240.0)
API contract
Windows.Foundation.UniversalApiContract (introduzida na v1.0)

Exemplos

Este exemplo mostra um uso básico em que dependencyProperty é estabelecido como um membro estático público de uma classe. Isso é feito chamando Register e armazenando o valor retornado como um membro da classe . Para obter mais exemplos, consulte Propriedades de dependência personalizadas.

public class Fish : Control
{
    public static readonly DependencyProperty SpeciesProperty =
    DependencyProperty.Register(
    "Species",
    typeof(String),
    typeof(Fish), null
    );
    public string Species
    {
        get { return (string)GetValue(SpeciesProperty); }
        set { SetValue(SpeciesProperty, (string)value); }
    }
}
Public Class Fish
    Inherits Control

    Public Shared ReadOnly SpeciesProperty As DependencyProperty = _
    DependencyProperty.Register(
    "Species", _
    GetType(String), _
    GetType(Fish), _
    Nothing)
    Public Property Species As String
        Get
            Species = CType(GetValue(SpeciesProperty), String)
        End Get
        Set(value As String)
            SetValue(SpeciesProperty, value)
        End Set
    End Property
End Class

Um exemplo de extensões de componente do Visual C++ (C++/CX) não é mostrado aqui porque deve ser fatorado completamente diferente dos exemplos do Microsoft .NET e envolve vários arquivos de código diferentes. Veja exemplos em Propriedades de dependência personalizadas.

Comentários

Os conceitos de propriedade de dependência são abordados em detalhes no tópico Visão geral das propriedades de dependência.

As instâncias de DependencyProperty geralmente são referenciadas na documentação como identificadores de propriedade de dependência. Os identificadores fornecem uma maneira de se referir a uma propriedade de dependência que foi registrada para um determinado tipo de proprietário DependencyObject . Quando o tipo de proprietário registra a propriedade, o tipo de proprietário expõe a instância DependencyProperty como o identificador, que é um membro estático da classe owner.

O dependencyObject do proprietário fornece o repositório de propriedades para a propriedade de dependência. Ao trabalhar com uma propriedade de dependência no código, você pode usar identificadores DependencyProperty como entrada para chamadas para métodos do sistema de propriedades, como SetValue. No entanto, na maioria dos casos, obter ou definir uma propriedade de dependência é mais simples obtendo ou definindo o wrapper; esse conceito é explicado na Visão geral das propriedades de dependência.

DependencyProperty dá suporte a uma conversão nativa para sintaxe de atributo XAML para preencher valores, que é usada quando um Setter especifica seu valor property . Essa conversão usa um formulário ownerTypeName**.**propertyName para a cadeia de caracteres de entrada.

Observação

Uma sintaxe relacionada que também pode ser usada para especificar uma propriedade por nome e é exigida por determinados dados e API de animação é a sintaxe do caminho da propriedade. Um caminho de propriedade pode ser usado para referenciar a estrutura de uma classe que tem propriedades e o valor dessa propriedade. Para obter mais informações, consulte Sintaxe do Property-path.

Dica

Se você estiver programando usando uma linguagem Microsoft .NET (C# ou Microsoft Visual Basic), o tipo TypeName será projetado como System.Type. Ao programar usando C#, é comum usar o operador typeof para obter referências ao System.Type de um tipo. No Microsoft Visual Basic, use GetType. Se você estiver usando extensões de componente do Visual C++ (C++/CX),em que precisará criar um struct auxiliar TypeName , poderá usar a extensão de componente typeid.

O Windows Runtime implementa o recurso de linguagem de propriedade anexada XAML com identificadores DependencyProperty e armazenamento de propriedades em um DependencyObject. Para saber mais, veja Visão geral de propriedades anexadas.

Propriedades de dependência personalizadas

Se você quiser que as propriedades em seus tipos personalizados ofereçam suporte a expressões de valor, associação de dados ou animação, você deverá apoiar as propriedades com uma propriedade de dependência seguindo estas diretrizes:

  • Registre uma propriedade de dependência usando o método Register , que retorna uma DependencyProperty. Esse é o identificador de propriedade de dependência. Você deve expor esse objeto como uma propriedade somente leitura estática acessível em sua classe. Por convenção, o nome desse campo do identificador DependencyProperty deve terminar com "Propriedade".
  • Durante o registro, você pode fornecer PropertyMetadata para a propriedade para definir ainda mais os comportamentos da propriedade.
  • Forneça acessadores get e set para a propriedade : estes são os wrappers de propriedade e simplificarão o acesso à sua propriedade para todos os chamadores.

Referências XAML a um nome de propriedade de dependência

Algumas propriedades que normalmente são definidas na marcação XAML usam DependencyProperty como seu valor. Por exemplo, você define Setter.Property em XAML. Para definir essa propriedade em XAML, especifique o nome da propriedade de dependência como o valor do atributo.

Para Setter.Property , o tipo do qual você está fazendo referência a um nome de propriedade de dependência já tem o escopo definido pelo TargetType do Style em que o Setter existe. Para uma propriedade de dependência no objeto TargetType , você pode especificar um valor Setter.Property usando o nome simples da propriedade de dependência. Por exemplo, se você tiver um Style direcionado a um Controle Deslizante e desejar definir o estilo da propriedade Orientation , o valor do atributo Property poderá ser apenas "Orientation". Nomes simples também funcionam desde que a propriedade de dependência veio de uma classe na herança mais profunda do tipo de destino. Por exemplo, para definir o estilo da propriedade Visibility no Estilo de um Controle Deslizante, um valor de atributo Property de "Visibility" funcionará. Nesse caso, Visibility foi definido por UIElement, mas herda para Slider.

Você também pode usar Setter.Property para referenciar um nome de propriedade anexado. Para o valor do atributo, use o formulário AttachedPropertyOwner.AttachedPropertyName, assim como você usaria para definir essa propriedade anexada como um atributo em XAML. Por exemplo, aqui está um Setter que define a propriedade anexada AutomationProperties.ItemType em um Estilo: <Setter Property="AutomationProperties.ItemType" Value="Navigation Button"/>

Observação

O nome de uma propriedade de dependência não é o nome do identificador de propriedade estática DependencyProperty. É a cadeia de caracteres de nome com a qual a propriedade está registrada e o nome que é o nome de uso típico dessa propriedade em Windows Runtime programação quando exposta pelo Microsoft IntelliSense e a documentação de referência. Em outras palavras, você não deseja que a cadeia de caracteres especificada para Setter.Property em XAML termine com "Property" (exceto por alguns casos raros em que a propriedade de dependência realmente contém o sufixo "Property").

Usando uma DependencyProperty (identificador de propriedade de dependência) no código

Há vários métodos que são métodos utilitários para o sistema de propriedades Windows Runtime que usam um valor DependencyProperty como um parâmetro de entrada. Estão incluídos:

Propriedades

UnsetValue

Especifica um valor estático que é usado pelo sistema de propriedades em vez de nulo para indicar que a propriedade existe, mas não tem seu valor definido pelo sistema de propriedades ou por qualquer código de aplicativo.

Métodos

GetMetadata(TypeName)

Recupera o valor de metadados da propriedade para a propriedade de dependência conforme registrado em um tipo. Especifique o tipo do qual deseja obter informações como uma referência de tipo.

Register(String, TypeName, TypeName, PropertyMetadata)

Registra uma propriedade de dependência com o nome da propriedade, o tipo de propriedade, o tipo de proprietário e os metadados de propriedade especificados para a propriedade. Use esse método ao definir ou inicializar uma classe derivada DependencyObject que será proprietária da propriedade de dependência registrada.

RegisterAttached(String, TypeName, TypeName, PropertyMetadata)

Registra uma propriedade de dependência anexada com o nome da propriedade, o tipo de propriedade, o tipo de proprietário e os metadados de propriedade especificados para a propriedade.

Aplica-se a

Confira também