Partilhar via


CreateDefaultValueCallback Delegar

Definição

Representa o método que pode ser invocado como parte de um construtor PropertyMetadata para adiar a definição de um valor padrão da propriedade de dependência.

public delegate Platform::Object ^ CreateDefaultValueCallback();
/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.UniversalApiContract, 65536)]
/// [Windows.Foundation.Metadata.Guid(3605836076, 5557, 20168, 185, 92, 205, 210, 8, 240, 129, 83)]
class CreateDefaultValueCallback : MulticastDelegate
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.UniversalApiContract), 65536)]
[Windows.Foundation.Metadata.Guid(3605836076, 5557, 20168, 185, 92, 205, 210, 8, 240, 129, 83)]
public delegate object CreateDefaultValueCallback();
Public Delegate Function CreateDefaultValueCallback() As Object 

Valor Retornado

Object

Platform::Object

IInspectable

O valor padrão desejado.

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 o pseudocódigo para usar CreateDefaultValueCallback em um cenário de propriedade de dependência personalizada. Especificamente, isso cria PropertyMetadata a ser usado em uma chamada DependencyProperty.Register (não mostrada).

PropertyMetadata metadata = PropertyMetadata.Create(
    new CreateDefaultValueCallback(() =>
    {
        return new CustomClass() //a DependencyObject
        {
            CustomProperty1 = "default", //DependencyProperty of type String 
            CustomProperty2 = -1; //DependencyProperty of type Int32
        }
    })

Comentários

Ao registrar uma propriedade de dependência personalizada, você pode fornecer metadados (um valor PropertyMetadata ) que fornece um valor padrão para todos os usos da propriedade de dependência. Muitas vezes, é adequado fornecer esse valor diretamente nos metadados como um valor imediato. Isso sempre funcionará para qualquer valor de tipo de valor, por exemplo, especificando um valor padrão de -1 para uma propriedade de valor int . No entanto, se você quiser relatar um valor padrão para uma propriedade que é uma propriedade de referência, como um valor DependencyObject , poderá encontrar um problema de threading relacionado a como as propriedades de dependência funcionam. Todos os objetos DependencyObject são sempre criados em um thread de interface do usuário. Mas é possível que o thread que registra a propriedade e o thread que eventualmente usa uma instância do objeto e tenta acessar o padrão não sejam o mesmo thread de interface do usuário. Se você fornecer um CreateDefaultValueCallback em seu PropertyMetadata em vez de uma instância fixa, o valor padrão da propriedade será criado just-in-time e será garantido como acessível pelo thread que está realmente usando a propriedade . Em outras palavras, a propriedade como registra adiado qual é o valor padrão, mas a propriedade como usada agora pode fornecer um valor padrão thread-safe.

Um CreateDefaultValueCallback típico não deve fazer nada além de chamar um construtor para o tipo de referência usado como um valor e definir propriedades desse tipo de referência e, em seguida, retorná-lo.

Para especificar um CreateDefaultValueCallback em uma instância propertyMetadata , você deve usar PropertyMetadata.Create para criar a instância, não um construtor PropertyMetadata .

Aplica-se a

Confira também