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
Возвращаемое значение
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 .