CreateDefaultValueCallback Delegat

Definition

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

public delegate Platform::Object ^ CreateDefaultValueCallback();
/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.UniversalApiContract, 65536)]
/// [Windows.Foundation.Metadata.Guid(3605836076, 5557, 20168, 185, 92, 205, 210, 8, 240, 129, 83)]
class CreateDefaultValueCallback : MulticastDelegate
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.UniversalApiContract), 65536)]
[Windows.Foundation.Metadata.Guid(3605836076, 5557, 20168, 185, 92, 205, 210, 8, 240, 129, 83)]
public delegate object CreateDefaultValueCallback();
Public Delegate Function CreateDefaultValueCallback() As Object 

Rückgabewert

Object

Platform::Object

IInspectable

Der gewünschte Standardwert.

Attribute

Windows-Anforderungen

Gerätefamilie
Windows 10 (eingeführt in 10.0.10240.0)
API contract
Windows.Foundation.UniversalApiContract (eingeführt in v1.0)

Beispiele

Dieses Beispiel zeigt Pseudocode für die Verwendung von CreateDefaultValueCallback in einem Szenario mit benutzerdefinierten Abhängigkeitseigenschaften. Dies erstellt insbesondere PropertyMetadata , die in einem DependencyProperty.Register-Aufruf verwendet werden (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 ) angeben, der einen Standardwert für alle Verwendungen der Abhängigkeitseigenschaft bereitstellt. Oft ist es ausreichend, diesen Wert direkt in Den Metadaten als unmittelbaren Wert anzugeben. Dies funktioniert immer für jeden Werttypwert, z. B. die Angabe eines Standardwerts von -1 für eine int value-Eigenschaft. 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 mit der Funktionsweise von Abhängigkeitseigenschaften zusammenhängt. 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 einer festen instance bereitstellen, wird der Standardwert der Eigenschaft just-in-time erstellt und ist garantiert für den Thread verfügbar, der die Eigenschaft tatsächlich verwendet. Anders ausgedrückt: Die Eigenschaft als Register hat den Standardwert verzögert, aber die verwendete Eigenschaft kann jetzt einen threadsicheren Standardwert bereitstellen.

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

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

Gilt für:

Weitere Informationen