Поделиться через


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 в сценарии пользовательского свойства зависимостей. В частности, это создает PropertyMetadata для использования в вызове 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 свойства value. Однако если вы хотите сообщить значение по умолчанию для свойства, являющегося ссылочным свойством, например значение DependencyObject , вы можете столкнуться с проблемой потоков, связанной с работой свойств зависимостей. Все объекты DependencyObject всегда создаются в потоке пользовательского интерфейса. Но вполне возможно, что поток, который регистрирует свойство, и поток, который в конечном итоге использует экземпляр объекта и пытается получить доступ к умолчанию, не являются тем же потоком пользовательского интерфейса. Если вы предоставляете CreateDefaultValueCallback в propertyMetadata , а не фиксированный экземпляр, значение свойства по умолчанию создается JIT и гарантированно будет использоваться потоком, который фактически использует свойство . Другими словами, свойство как регистрирует отложенное значение по умолчанию, но используемое свойство теперь может предоставлять потокобезопасное значение по умолчанию.

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

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

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

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