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


CreateDefaultValueCallback Делегат

Определение

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

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 

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

Object

Platform::Object

IInspectable

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

Атрибуты

Требования к Windows

Семейство устройств
Windows 10 (появилось в 10.0.10240.0)
API contract
Windows.Foundation.UniversalApiContract (появилось в v1.0)

Примеры

В этом примере показан псевдокод для использования 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 в свойствеMetadata , а не фиксированный экземпляр, значение свойства по умолчанию создается JIT и гарантированно будет аккумулировано потоком, который фактически использует свойство . Другими словами, свойство как регистрирует отложенное значение по умолчанию, но используемое свойство теперь может предоставлять потокобезопасное значение по умолчанию.

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

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

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

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