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 值 (提供中繼資料) ,以提供所有相依性屬性的預設值。 在許多情況下,只要直接在中繼資料中提供該值做為立即值即可。 這一律適用于任何實值型別值,例如為 value 屬性指定預設值 -1 int 。 不過,如果您想要報告參考屬性的預設值,例如 DependencyObject 值,您可能會遇到與相依性屬性運作方式相關的執行緒問題。 所有 DependencyObject 物件一律會在 UI 執行緒上建立。 但是,註冊 屬性的執行緒和最後會使用 物件的實例並嘗試存取預設值的執行緒可能不是相同的 UI 執行緒。 如果您在PropertyMetadata中提供CreateDefaultValueCallback,而不是固定實例,則屬性的預設值是 Just-In-Time 建立,而且保證可由實際使用 屬性的執行緒存取。 換句話說, 屬性會延後預設值,但所使用的 屬性現在可以提供安全線程的預設值。

一般的 CreateDefaultValueCallback 應該不只呼叫做為值的參考型別建構函式,並設定該參考型別的屬性,然後再傳回它。

若要在PropertyMetadata實例內指定CreateDefaultValueCallback,您必須使用PropertyMetadata.Create來建立實例,而不是PropertyMetadata建構函式。

適用於

另請參閱