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 を使用するための擬似コードを示します。 具体的には、DependencyProperty.Register 呼び出しで使用される PropertyMetadata が作成されます (表示されません)。

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 スレッドではない可能性があります。 固定インスタンスではなく PropertyMetadataCreateDefaultValueCallback を指定した場合、プロパティの既定値は Just-In-Time で作成され、プロパティを実際に使用しているスレッドによってアクセス可能であることが保証されます。 言い換えると、レジスタとしての プロパティは既定値を遅延させますが、使用されている プロパティはスレッド セーフな既定値を提供できるようになりました。

一般的な CreateDefaultValueCallback では、値として使用される参照型のコンストラクターを呼び出し、その参照型のプロパティを設定してから、それを返す必要があります。

PropertyMetadata インスタンス内で CreateDefaultValueCallback を指定するには、PropertyMetadata コンストラクターではなく、PropertyMetadata.Create を使用してインスタンスを作成する必要があります。

適用対象

こちらもご覧ください