CreateDefaultValueCallback Delegat

Definition

Stellt die Methode dar, die als Teil eines PropertyMetadata-Konstruktors aufgerufen werden kann, um die Definition eines Standardwerts für Abhängigkeitseigenschaften 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

Dieses Beispiel zeigt pseudocode für die Verwendung von CreateDefaultValueCallback in einem benutzerdefinierten Abhängigkeitseigenschaftsszenario. Dies erstellt propertyMetadata , die in einem DependencyProperty.Register-Aufruf verwendet werden soll (nicht dargestellt).

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 Metadaten als sofortigen 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 Referenzeigenschaft ist, z. B. einen DependencyObject-Wert , können Sie ein Threadingproblem feststellen, 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 und den Thread registriert, der schließlich eine Instanz des Objekts verwendet und versucht, auf den Standardwert zuzugreifen, nicht den gleichen UI-Thread ist. Wenn Sie einen CreateDefaultValueCallback in Ihrer PropertyMetadata anstelle einer festen Instanz bereitstellen, wird der Standardwert der Eigenschaft just-in-time erstellt und kann vom Thread, der tatsächlich die Eigenschaft verwendet, garantiert zugegriffen werden. Mit anderen Worten, die Eigenschaft als Register zurückgestellt, was der Standardwert ist, aber die eigenschaft, wie verwendet, kann jetzt einen threadsicheren Standardwert bereitstellen.

Ein typischer CreateDefaultValueCallback sollte nicht mehr als einen Konstruktor für den Referenztyp aufrufen, der als Wert verwendet wird, und eigenschaften dieses Verweistyps festlegen und ihn zurückgeben.

Um einen CreateDefaultValueCallback in einer PropertyMetadata-Instanz anzugeben, müssen Sie propertyMetadata.Create verwenden, um die Instanz zu erstellen, nicht einen PropertyMetadata-Konstruktor .

Gilt für:

Weitere Informationen