CreateDefaultValueCallback Делегат

Определение

Представляет метод, который можно вызвать как часть конструктора PropertyMetadata , чтобы отложить определение значения свойства зависимости по умолчанию.

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 

Возвращаемое значение

Object

Platform::Object

Требуемое значение по умолчанию.

Атрибуты

Примеры

В этом примере показан псевдокод для использования CreateDefaultValueCallback в сценарии пользовательского свойства зависимостей. В частности, это создает свойстваMetadata , которые будут использоваться в вызове DependencyProperty.Register (не показан).

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

Комментарии

При регистрации настраиваемого свойства зависимостей можно указать метаданные (значение PropertyMetadata ), которое предоставляет значение по умолчанию для всех используемых свойств зависимостей. Много раз это достаточно для предоставления этого значения непосредственно в метаданных в качестве немедленного значения. Это всегда будет работать для любого значения типа значения, например при указании значения по умолчанию -1 для int свойства значения. Однако если вы хотите сообщить о значении по умолчанию для свойства, являющегося эталонным свойством, например значением DependencyObject , можно столкнуться с проблемой потоков, связанной с работой свойств зависимостей. Все объекты DependencyObject всегда создаются в потоке пользовательского интерфейса. Но возможно, что поток, который регистрирует свойство и поток, который в конечном итоге использует экземпляр объекта и пытается получить доступ к умолчанию, не совпадают с потоком пользовательского интерфейса. Если вы предоставляете createDefaultValueCallback в свойствах, а не фиксированный экземпляр, то значение свойства по умолчанию создается jit-in-time и гарантированно будет аккуссулировано потоком, который фактически использует свойство. Другими словами, свойство как регистры откладывают значение по умолчанию, но свойство, используемое теперь может предоставить значение по умолчанию, безопасное для потока.

Типичный метод CreateDefaultValueCallback не должен делать ничего больше, чем вызывать конструктор для ссылочного типа, используемого в качестве значения, и задавать свойства этого ссылочного типа, а затем возвращать его.

Чтобы указать CreateDefaultValueCallback в экземпляре PropertyMetadata , необходимо использовать PropertyMetadata.Create для создания экземпляра, а не конструктора PropertyMetadata .

Применяется к

См. также раздел