DependencyPropertyKey.OverrideMetadata(Type, PropertyMetadata) Método

Definição

Sobrepõe os metadados de uma propriedade de dependência apenas de leitura que é representada por este 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 em que esta propriedade de dependência existe e os metadados devem ser sobrepostos.

typeMetadata
PropertyMetadata

Metadados fornecidos para este tipo.

Exceções

Tentativa de sobreposição de metadados numa propriedade de dependência de leitura-escrita (não pode ser feita com esta assinatura).

Os metadados já estavam estabelecidos para a propriedade tal como existe no tipo fornecido.

Exemplos

O exemplo seguinte sobrepõe metadados de uma propriedade de dependência de apenas leitura existente que uma classe herda. Neste caso, o objetivo do cenário era adicionar um callback de valor de coerção que os metadados da propriedade base não tinham. Também pode sobrescrever metadados por qualquer outra razão pela qual a sobreposição dos metadados é normalmente apropriada (alterar valor predefinido, adicionar 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

Observações

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

Tal como nas propriedades de dependência de leitura-escrita, sobrepor metadados numa propriedade de dependência só de leitura deve ser feito antes dessa propriedade ser colocada em uso pelo sistema de propriedades (isto equivale ao momento em que instâncias específicas de objetos que registam a propriedade são instanciadas). As chamadas a OverrideMetadata só devem ser realizadas dentro dos construtores estáticos do tipo que se fornece como forType parâmetro deste método, ou inicialização equivalente para essa classe.

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

Aplica-se a

Ver também