2009-07-22 21 views
7

Tại sao cài đặt thuộc tính phụ thuộc sẽ làm hỏng ứng dụng của tôi khi tôi cung cấp giá trị mặc định?Tại sao việc triển khai thuộc tính phụ thuộc sẽ làm hỏng ứng dụng của tôi khi tôi cung cấp một giá trị mặc định?

Đoạn mã này nằm trong khai báo lớp cho đối tượng UserControl của tôi. Mọi thứ hoạt động tốt - nó biên dịch và chạy hoàn hảo.

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); } 
} 

Tuy nhiên, khi tôi thêm các giá trị mặc định cho tài sản phụ thuộc:
mã biên dịch, nhưng tai nạn với một ngoại lệ gây tử vong khi nó cố gắng để nhanh chóng các UserControl.

Để tham khảo, mã của tôi bây giờ trông như thế này - với dòng PropertyMetaData thêm:

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); } 
} 

Loại bỏ các PropertyMetadata từ cuộc gọi đến đăng ký() làm cho chương trình hoạt động hoàn hảo, không có tai nạn hoặc bất kỳ khác các vấn đề. Nhưng tôi cần giá trị mặc định cho mã sau. Làm cách nào để tôi chấp nhận giá trị mặc định mà không bị lỗi?

Khi nó bị treo, các ngoại lệ sau được hiển thị trong cửa sổ đầu ra:

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 

tôi cần phải có được điều này làm việc càng sớm càng tốt, vì vậy bất kỳ lời khuyên sẽ là tuyệt vời!

+0

Nếu bạn có theo dõi ngăn xếp, điều đó sẽ cực kỳ hữu ích. –

+0

Thật sao? Tôi không biết nó có liên quan gì. Lemme xem những gì tôi có thể đến với ... Tôi có thể không nhận được xung quanh nó cho một chút - bận rộn trên một cái gì đó bức xúc. – Giffyguy

Trả lời

17

Câu trả lời ngắn:

phụ thuộc giá trị mặc định tài sản cần phải được thread an toàn (ví dụ kế thừa từ System.Windows.Freezable) nhưng System.Windows.Forms.Rectangle thì không.

Long trả lời:

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

Gợi ý:

Nếu bạn đang sử dụng Visual Studio nó thực sự giúp để cho giờ nghỉ IDE trên tất cả các ngoại lệ được ném. Chỉ cần vào "Debug" -> "Exceptions" và kiểm tra "Common Language Runtime Exceptions" "Thrown".

Sau đó, bạn sẽ được nhắc và nhận thông báo ngoại lệ trong trường hợp của bạn trông như sau: "Thông tin bổ sung: Giá trị mặc định cho thuộc tính 'Rect' không thể bị ràng buộc vào một chuỗi cụ thể".

Các vấn đề liên quan