CreateDefaultValueCallback 代理人
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
表示可以叫用為 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 的虛擬程式碼。 具體而言,這會建立 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 值 (提供中繼資料) ,以提供所有相依性屬性的預設值。 在許多情況下,只要直接在中繼資料中提供該值做為立即值即可。 這一律適用于任何實值型別值,例如為 value 屬性指定預設值 -1 int
。 不過,如果您想要報告參考屬性的預設值,例如 DependencyObject 值,您可能會遇到與相依性屬性運作方式相關的執行緒問題。 所有 DependencyObject 物件一律會在 UI 執行緒上建立。 但是,註冊 屬性的執行緒和最後會使用 物件的實例並嘗試存取預設值的執行緒可能不是相同的 UI 執行緒。 如果您在PropertyMetadata中提供CreateDefaultValueCallback,而不是固定實例,則屬性的預設值是 Just-In-Time 建立,而且保證可由實際使用 屬性的執行緒存取。 換句話說, 屬性會延後預設值,但所使用的 屬性現在可以提供安全線程的預設值。
一般的 CreateDefaultValueCallback 應該不只呼叫做為值的參考型別建構函式,並設定該參考型別的屬性,然後再傳回它。
若要在PropertyMetadata實例內指定CreateDefaultValueCallback,您必須使用PropertyMetadata.Create來建立實例,而不是PropertyMetadata建構函式。