Compartilhar 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(typeof(Microsoft.UI.Xaml.WinUIContract), 65536)]
[Windows.Foundation.Metadata.Guid(2139130885, 10948, 23257, 172, 138, 38, 137, 3, 51, 216, 30)]
public delegate object CreateDefaultValueCallback();
Public Delegate Function CreateDefaultValueCallback() As Object 

Valor Retornado

Object

Platform::Object

O valor padrão desejado.

Atributos

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 int propriedade de valor. 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