2010-06-15 30 views
5

Tôi đang cố viết một tùy chỉnh MarkupExtension để làm cho cuộc sống của tôi dễ dàng hơn bằng cách cho tôi một cách tốt hơn để chỉ định các ràng buộc trong XAML. Tuy nhiên tôi muốn biết nếu có bất kỳ cách nào tôi có thể truy cập vào đối tượng đại diện cho tệp MarkupExtension được sử dụng.Truy cập "lớp hiện tại" từ tùy chỉnh WPF MarkupExtension

Nói cách khác, giả sử tôi có một biểu hiện cụ thể của mô hình dữ liệu của tôi chương trình. Điều khiển này có rất nhiều công cụ trực quan như lưới, đường viền và bố cục chung. Nếu tôi sử dụng MarkupExtension trên một thuộc tính cụ thể của một số phần tử trong số UserControl này, tôi muốn truy cập vào cá thể của UserControl, mà không biết loại đó là gì (tôi dự định sử dụng sự phản chiếu).

Điều này có thể thực hiện được không?

Trả lời

11

Trong .NET 4.0, họ đã thêm khả năng IRootObjectProvider, nhưng rất tiếc, không thể thực hiện được trong các phiên bản trước. Nếu bạn đang sử dụng .NET 4.0, bạn có thể thực hiện các thao tác sau:

public override object ProvideValue(IServiceProvider serviceProvider) 
{ 
    var rootObjectProvider = serviceProvider.GetService(typeof(IRootObjectProvider)) as IRootObjectProvider; 
    var root = rootObjectProvider.RootObject; 
    // do whatever you need to do here 
} 
+0

I * am * using .NET 4! Lemme thử nó đi. :) – devios1

+0

Hoạt động hoàn hảo! Cảm ơn! – devios1

+0

Không có cách nào khác cho chúng tôi, bị mắc kẹt trong 3.5 ?! : ((((((((( –

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