2010-04-28 39 views
25

Chúng tôi vừa chuyển sang vs2010 từ vs2008, và các dự án của chúng tôi biên dịch và chạy tốt mà không gặp bất kỳ vấn đề gì. Tuy nhiên, trình thiết kế xaml có một số lỗi. Đây là một trong những lỗi mà ai đó hy vọng có thể cung cấp giải pháp.VS2010 Custom MarkupExtension

Chúng tôi có MarkupExtension tùy chỉnh và chúng tôi sử dụng nó trong xaml để nhận một số tài nguyên nhất định. Một cái gì đó như thế này:

<Button Style="{l:GetResource Key=MyButtonStyle}" />

tôi biết chúng tôi có thể sử dụng StaticResource hoặc DynamicResource. Tuy nhiên, chúng tôi có lý do để sử dụng markupextension tùy chỉnh.

Các thông báo lỗi từ các nhà thiết kế là:

'GetResourceExtension' là không hợp lệ cho Setter.Value. Chỉ loại MarkupExtension được hỗ trợ là DynamicResourceExtensionBindingBase hoặc các loại có nguồn gốc.

Câu hỏi của tôi là mã hoạt động tốt trong năm 2008 và cũng hoạt động tốt trong năm 2010, cách làm cho nhà thiết kế 2010 hoạt động?

+1

Bạn đã thử điều này trong Blend chưa? Tôi tự hỏi nếu Cyder (thiết kế XAML VS20120) nó chỉ đơn giản là không thể đối phó với phần mở rộng đánh dấu tùy chỉnh. Nó sẽ không làm tôi ngạc nhiên vì nó khá nhạy cảm, mặc dù đây là một cơ bản. Lỗi này có làm hỏng nhà thiết kế hay không và nó hoạt động như một lỗi? –

Trả lời

1

Tôi đã viết một vài Tiện ích đánh dấu và mặc dù mã chạy tôi nhận được lỗi Xaml giống như lỗi bạn nhận được mọi lúc. Giả sử bạn có mã hợp lệ, tôi tìm thấy cách duy nhất để loại bỏ các lỗi là thông qua tùy chọn xây dựng lại và sau đó chạy ứng dụng.

Tất nhiên vấn đề là nếu bạn thay đổi lại hoặc di chuyển các lỗi có vẻ như đã trở lại. Giả định của tôi là biên dịch tĩnh không thể giải quyết hoàn toàn bất cứ việc đánh dấu nào của bạn đang làm và đang ném lỗi dựa trên điều này.

Trong trường hợp của tôi, tôi đã viết một trình kết nối phương thức và vì đối tượng là null cho đến khi chạy, tôi đã phải sử dụng đối tượng mới(); và hoán đổi nó trong thời gian chạy. Đó là hacky nhưng lỗi biên dịch đã được lái xe cho tôi hạt.

Trình phân tích cú pháp xaml có vẻ tốt hơn vào năm 2012 nhưng ngay cả khi có lỗi lẻ.