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 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
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.