DependencyPropertyKey.OverrideMetadata(Type, PropertyMetadata) Método
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
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.