Compartilhar via


DependencyPropertyKey.OverrideMetadata(Type, PropertyMetadata) Método

Definição

Substitui os metadados de uma propriedade de dependência somente leitura que é representada por esse identificador de propriedade de dependência.

public:
 void OverrideMetadata(Type ^ forType, System::Windows::PropertyMetadata ^ typeMetadata);
public void OverrideMetadata (Type forType, System.Windows.PropertyMetadata typeMetadata);
member this.OverrideMetadata : Type * System.Windows.PropertyMetadata -> unit
Public Sub OverrideMetadata (forType As Type, typeMetadata As PropertyMetadata)

Parâmetros

forType
Type

O tipo no qual essa propriedade de dependência existe e os metadados devem ser substituídos.

typeMetadata
PropertyMetadata

Metadados fornecidos para esse tipo.

Exceções

Ocorreu uma tentativa de substituir os metadados em uma propriedade de dependência de leitura/gravação (não pode ser feita usando essa assinatura).

Os metadados já foram estabelecidos para a propriedade como ela existe no tipo fornecido.

Exemplos

O exemplo a seguir substitui os metadados de uma propriedade de dependência somente leitura existente herdada por uma classe. Nesse caso, a meta do cenário era adicionar um retorno de chamada de valor coercitivo que os metadados da propriedade base não tinham. Você também pode substituir metadados por qualquer um dos outros motivos pelos quais a substituição de metadados normalmente é apropriada (alterando o valor padrão, adicionando FrameworkPropertyMetadataOptions valores etc.)

static Fishbowl() {
  Aquarium.AquariumSizeKey.OverrideMetadata(
    typeof(Aquarium),
    new PropertyMetadata(
      double.NaN,
      null,
      new CoerceValueCallback(CoerceFishbowlAquariumSize)
    )
  );
}

static object CoerceFishbowlAquariumSize(DependencyObject d,Object baseValue)
{
    //Aquarium is 2D, a Fishbowl is a round Aquarium, so the Size we return is the ellipse of that height/width rather than the rectangle
    Fishbowl fb = (Fishbowl)d;
    //other constraints assure that H,W are positive
    return Convert.ToInt32(Math.PI * (fb.Width / 2) * (fb.Height / 2));
}
Shared Sub New()
    Aquarium.AquariumSizeKey.OverrideMetadata(GetType(Aquarium), New PropertyMetadata(Double.NaN, Nothing, New CoerceValueCallback(AddressOf CoerceFishbowlAquariumSize)))
End Sub

Private Shared Function CoerceFishbowlAquariumSize(ByVal d As DependencyObject, ByVal baseValue As Object) As Object
    'Aquarium is 2D, a Fishbowl is a round Aquarium, so the Size we return is the ellipse of that height/width rather than the rectangle
    Dim fb As Fishbowl = CType(d, Fishbowl)
    'other constraints assure that H,W are positive
    Return Convert.ToInt32(Math.PI * (fb.Width / 2) * (fb.Height / 2))
End Function

Comentários

A substituição de metadados em uma propriedade de dependência somente leitura é feita por razões semelhantes à substituição de metadados em uma propriedade de dependência de leitura-gravação e é restrita ao acesso no nível da chave porque os comportamentos especificados nos metadados podem alterar o comportamento do conjunto (o valor padrão, por exemplo).

Assim como acontece com as propriedades de dependência de leitura/gravação, a substituição de metadados em uma propriedade de dependência somente leitura só deve ser feita antes dessa propriedade ser colocada em uso pelo sistema de propriedades (isso equivale ao tempo em que instâncias específicas de objetos que registram a propriedade são instanciadas). As chamadas só OverrideMetadata devem ser executadas dentro dos construtores estáticos do tipo que se fornece como o forType parâmetro desse método ou inicialização equivalente para essa classe.

Esse método encaminha efetivamente para o OverrideMetadata método, passando a DependencyPropertyKey instância como o parâmetro de chave.

Aplica-se a

Confira também