CreateDefaultValueCallback Delegat
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
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
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.