2010-07-30 25 views
8

Tôi cần phải thêm mã sau lớp vào Tài nguyên Từ điển như được mô tả trong this question. (Tôi biết rằng đây không phải là một thực hành tốt nhưng nó phải làm việc dựa trên các ý kiến ​​cho câu hỏi liên quan) .I'm tham khảo mã với x: Class thuộc tính:xClassNotDerivedFromElement lỗi khi thêm Mã Đằng sau vào Tài nguyên Từ điển trong silverlight

XAML (Resource riêng từ điển tập tin):

<ResourceDictionary 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    x:Class="MyNamespace.MyStandardResources"> 
    ... 
</ResourceDictionary> 

Mã sản phẩm:

using System.Windows; 

namespace MyNamespace 
{ 
    public partial class MyStandardResources : ResourceDictionary 
    { 
     public MyStandardResources() 
     { 
      InitializeComponent(); 
     } 

     //... 
    } 
} 

Điều này làm cho ngoại lệ phân tích cú pháp runtime:

Parser lỗi nội bộ: Object nhà văn 'xCla ssNotDerivedFromElement '. [Line: xxx Position: xxx] tại System.Windows.Application.LoadComponent.

Các tài nguyên được bao gồm trong App.xaml với thẻ ResourceDictionary.MergedDictionaries.

+0

Xóa mã gọi nhưng hàm tạo từ mã và xóa tất cả tài nguyên khỏi Xaml để lại từ điển tài nguyên trống. Bạn vẫn gặp lỗi? (Tên hàm tạo của BTW "StandardResources" là lỗi chính tả?) – AnthonyWJones

+0

Sửa lỗi chính xác. Tôi vẫn gặp lỗi khi sử dụng lớp trống và từ điển tài nguyên XAML trống. – PanJanek

Trả lời

6

Bạn đang cố sử dụng ResourceDictionary này làm giá trị Nguồn của từ điển đã hợp nhất chưa? Nếu vậy, điều đó không được hỗ trợ. Bạn nhận được rằng xClassNotDerivedFromElement lỗi, đó là một cách kỳ lạ để chỉ ra nó, nhưng đây là lý do tại sao: giá trị thuộc tính nguồn được dịch theo cách tham chiếu XAML như XAML, không phải là một lớp. Trình phân tích cú pháp XAML mở ra rằng XAML là một hành động tải thuần túy mà không có lợi ích của bất kỳ biên dịch trước nào, và không thể hòa giải x: Lớp tại thời điểm đó.

5

Lớp x: bị hạn chế đối với các từ điển được hợp nhất trong App.xaml. Thay vào đó bạn nên sử dụng lớp học của bạn định nghĩa là mã sau trong nguồn App:

<Application xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     x:Class="MyNamespace.App" 
     xmlns:view="clr-namespace:MyNamespace"> 

    <Application.Resources> 
     <ResourceDictionary> 
      <ResourceDictionary.MergedDictionaries> 
       <view:MyStandardResources /> 
       .... 
      </ResourceDictionary.MergedDictionaries> 
     </ResourceDictionary> 
    </Application.Resources> 

</Application> 
+0

Cảm ơn !! Những hiểu biết tuyệt đối về vàng! –

0

Đó là một điều đáng tiếc rằng việc tạo mã-đằng sau cho một cuốn từ điển tài nguyên hiện nay có nghĩa là bạn không thể tạo một ResourceDictionary sử dụng URI để XAML.

Tôi đã gỡ bỏ tôi code-behind một lần nữa, nhưng vẫn tạo ra ResourceDictionary trong mã bằng cách sử dụng câu trả lời từ này question+and+answer

Về cơ bản nó chỉ tạo ra một sản phẩm nào ResourceDictionary và thiết lập của nó Source để XAML uri trong mã.

Đối với tôi, điều này làm việc tốt hơn bởi vì nó có nghĩa là bất kỳ ai khác vẫn có thể tham khảo từ điển tài nguyên nếu họ muốn và thực hiện theo cách 'mong đợi'.

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