CreateDefaultValueCallback Delegat

Definition

Stellt die Methode dar, die als Teil eines PropertyMetadata-Konstruktors aufgerufen werden kann, um die Definition eines Abhängigkeitseigenschaftsstandardwerts zurückzuweisen.

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 

Rückgabewert

Object

Platform::Object

Der gewünschte Standardwert.

Attribute

Beispiele

In diesem Beispiel wird Pseudocode für die Verwendung von CreateDefaultValueCallback in einem Szenario mit einer benutzerdefinierten Abhängigkeitseigenschaft veranschaulicht. Dadurch werden insbesondere PropertyMetadata erstellt, die in einem DependencyProperty.Register-Aufruf verwendet werden sollen (nicht angezeigt).

PropertyMetadata metadata = PropertyMetadata.Create(
    new CreateDefaultValueCallback(() =>
    {
        return new CustomClass() //a DependencyObject
        {
            CustomProperty1 = "default", //DependencyProperty of type String 
            CustomProperty2 = -1; //DependencyProperty of type Int32
        }
    })

Hinweise

Wenn Sie eine benutzerdefinierte Abhängigkeitseigenschaft registrieren, können Sie Metadaten (einen PropertyMetadata-Wert ) bereitstellen, der einen Standardwert für alle Verwendungen der Abhängigkeitseigenschaft bereitstellt. Oft ist es ausreichend, diesen Wert direkt in Den Metadaten als unmittelbaren Wert bereitzustellen. Dies funktioniert immer für jeden Werttypwert, z. B. das Angeben eines Standardwerts von -1 für eine int Werteigenschaft. Wenn Sie jedoch einen Standardwert für eine Eigenschaft melden möchten, die eine Verweiseigenschaft ist, z. B . einen DependencyObject-Wert , kann ein Threadingproblem auftreten, das sich auf die Funktionsweise von Abhängigkeitseigenschaften bezieht. Alle DependencyObject-Objekte werden immer in einem UI-Thread erstellt. Es ist jedoch möglich, dass der Thread, der die Eigenschaft registriert, und der Thread, der schließlich eine instance des Objekts verwendet und versucht, auf den Standard zuzugreifen, nicht derselbe UI-Thread sind. Wenn Sie ein CreateDefaultValueCallback in Ihren PropertyMetadata-Daten anstelle eines festen instance bereitstellen, wird der Standardwert der Eigenschaft just-in-time erstellt und garantiert, dass der Thread, der die Eigenschaft tatsächlich verwendet, zugegriffen werden kann. Anders ausgedrückt: Die Eigenschaft als Register hat den Standardwert zurückgestellt, aber die verwendete Eigenschaft kann jetzt einen threadsicheren Standardwert bereitstellen.

Ein typischer CreateDefaultValueCallback sollte nichts anderes tun, als einen Konstruktor für den als Wert verwendeten Verweistyp aufzurufen und Eigenschaften dieses Verweistyps festzulegen und dann zurückzugeben.

Um einen CreateDefaultValueCallback in einem PropertyMetadata-instance anzugeben, müssen Sie PropertyMetadata.Create verwenden, um den instance und nicht einen PropertyMetadata-Konstruktor zu erstellen.

Gilt für:

Weitere Informationen