2009-07-22 2 views
7

Warum würde eine Abhängigkeitseigenschaftsimplementierung meine Anwendung zum Absturz bringen, wenn ich einen Standardwert bereitstelle?Warum würde eine Dependency-Property-Implementierung meine Anwendung abstürzen, wenn ich einen Standardwert bereitstelle?

Dieses Code-Segment befindet sich in der Klassendeklaration für mein UserControl-Objekt. Alles funktioniert gut - es kompiliert und läuft perfekt.

public static System.Windows.DependencyProperty DepProp 
    = System.Windows.DependencyProperty.Register( "Rect", 
                typeof(System.Windows.Shapes.Rectangle), 
                typeof(FooControl)); 
public System.Windows.Shapes.Rectangle Rect 
{ 
    get 
    { return ((System.Windows.Shapes.Rectangle)(GetValue(DepProp))); } 
    set 
    { SetValue(DepProp, value); } 
} 

Allerdings, wenn ich den Standardwert in der Abhängigkeitseigenschaft hinzu:
Der Code kompiliert, aber stürzt mit einer schwerwiegenden Ausnahme, wenn es versucht, die Usercontrol zu instanziiert.

Als Referenz mein Code sieht nun wie folgt aus - mit der PropertyMetadata Zeile hinzugefügt:

public static System.Windows.DependencyProperty DepProp 
    = System.Windows.DependencyProperty.Register( "Rect", 
                typeof(System.Windows.Shapes.Rectangle), 
                typeof(FooControl), 
                new System.Windows.PropertyMetadata(new System.Windows.Shapes.Rectangle())); 
public System.Windows.Shapes.Rectangle Rect 
{ 
    get 
    { return ((System.Windows.Shapes.Rectangle)(GetValue(DepProp))); } 
    set 
    { SetValue(DepProp, value); } 
} 

die PropertyMetadata aus dem Aufruf Entfernen registrieren() bewirkt, dass das Programm perfekt funktioniert, ohne Abstürze oder andere Probleme. Aber ich brauche den Standardwert für den späteren Code. Wie kann ich den Standardwert akzeptieren, ohne abzustürzen?

A first chance exception of type 'System.ArgumentException' occurred in WindowsBase.dll 
A first chance exception of type 'System.Reflection.TargetInvocationException' occurred in mscorlib.dll 
A first chance exception of type 'System.Windows.Markup.XamlParseException' occurred in PresentationFramework.dll 

Ich brauche diese so schnell wie möglich arbeiten zu lassen, so würde jede Beratung genial:

Wenn es abstürzt, werden die folgenden Ausnahmen im Ausgabefenster angezeigt!

+0

Wenn Sie einen Stack-Trace hatten, wäre das sehr hilfreich. –

+0

Wirklich? Ich hatte keine Ahnung, dass das verwandt war. Laß mich sehen, was ich mir vorstellen kann ... Ich komme vielleicht für eine Weile nicht dazu - beschäftigt mit etwas Dringendem. – Giffyguy

Antwort

17

Kurze Antwort:

Abhängigkeitseigenschaft Standardwerte müssen Thread-sicher sein (beispielsweise von System.Windows.Freezable erben), aber System.Windows.Forms.Rectangle nicht.

Lange Antwort:

http://social.msdn.microsoft.com/forums/en-US/wpf/thread/2cb12481-ef86-40b7-8333-443598d89933/

Hinweis:

Wenn Sie Visual Studio verwenden es wirklich hilft, die IDE Pause auf jede Ausnahme geworfen werden zu lassen. Gehe einfach auf "Debug" -> "Exceptions" und wähle "Common Language Runtime Exceptions" "Thrown".

Dann werden Sie aufgefordert und erhalten die Ausnahmebedingungsnachricht, die in Ihrem Fall so aussieht: "Zusätzliche Informationen: Der Standardwert für die 'Rect' Eigenschaft kann nicht an einen bestimmten Thread gebunden werden."

Verwandte Themen