DependencyPropertyKey.OverrideMetadata(Type, PropertyMetadata) Método
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
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.