2010-06-11 21 views
7

Tôi đã phát triển một ứng dụng cho phép người dùng chuyển đổi giữa các chủ đề. Tôi đang làm điều này bằng cách bao gồm các tập tin XAML như một nguồn lực trong dự án của tôi và sử dụng đoạn mã sau:Sử dụng từ điển tài nguyên làm chủ đề trong Silverlight

MainTheme.ThemeUri = new Uri("SilverlightApplication1;component/Themes/[ThemeName]/Theme.xaml", UriKind.Relative); 

này làm việc tốt, cho đến khi tôi tìm thấy các chủ đề này: http://timheuer.com/blog/archive/2010/05/17/silverlight-4-tools-released-and-new-application-templates.aspx

Sự khác biệt là các chủ đề này bao gồm nhiều tệp. Vì vậy, tôi đã tạo một tệp Theme.xaml chỉ bao gồm MergedDictionaries vì ​​vậy tôi vẫn có thể sử dụng mã ở trên. Đây là tập tin Theme.xaml cho chủ đề Cosmopolitan.

<ResourceDictionary 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <ResourceDictionary.MergedDictionaries> 
     <ResourceDictionary Source="CoreStyles.xaml"/> 
     <ResourceDictionary Source="SDKStyles.xaml"/> 
     <ResourceDictionary Source="Styles.xaml"/> 
     <ResourceDictionary Source="ToolkitStyles.xaml"/> 
    </ResourceDictionary.MergedDictionaries> 
</ResourceDictionary> 

Tuy nhiên, khi tôi chạy đoạn code C# trên tôi nhận được ngoại lệ sau đây:

System.Windows.Markup.XamlParseException: Failed to assign to property 'System.Windows.ResourceDictionary.Source'. 

Chỉ cần được rõ ràng, sử dụng phương pháp MergedDictionaries làm việc khi tôi đặt nó trong App.xaml tôi:

<Application.Resources> 
    <ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="Themes/Cosmopolitan/Theme.xaml"/> 
     </ResourceDictionary.MergedDictionaries> 
    </ResourceDictionary> 
</Application.Resources> 

Tôi đang làm gì sai?

Cảm ơn!

+0

Thiết đường dẫn tuyệt đối trong tập tin Theme.xaml tôi cũng không hoạt động :( – SaphuA

+0

Tôi đã có một vấn đề tương tự và nguyên nhân đã sử dụng dấu gạch chéo ngược (\) thay vì dấu gạch chéo (/) khi tham chiếu tệp. Trình phân tích cú pháp xaml trong VS có thể giải quyết vị trí, nhưng tại thời điểm chạy, lỗi được tạo. –

Trả lời

10

Khi bạn đang sử dụng MergedDictionary bạn phải sử dụng tên đủ điều kiện như dưới đây.

<ResourceDictionary.MergedDictionaries> 
     <ResourceDictionary Source="/SilverlightApplication1;component/Themes/Cosmopolitan/Theme.xaml"/> 

Ngoài ra, lưu ý rằng bạn không nên bỏ lỡ dấu gạch chéo trước tên lắp ráp. Nói cách khác, nó phải là như

Source="/SilverlightApplication1; 

không thích

Source="SilverlightApplication1; 

HTH

+5

bạn không phải đặt 'thành phần' phía sau er tên lắp ráp "/SilverlightApplication1;component/Themes/Cosmopolitan/Theme.xaml" – user20358

+0

Có bạn nên đặt thành phần. Đúng rồi. – Lance

+1

@Prince: Phần thành phần là điều cần thiết. Vui lòng cân nhắc cập nhật câu trả lời của bạn. Nó sẽ là một câu trả lời tuyệt vời sau bản cập nhật đó. –

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