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
Возвращаемое значение
Требуемое значение по умолчанию.
- Атрибуты
Требования к 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 .