7

Khi tôi đọc: http://msdn.microsoft.com/en-us/library/cc903952(VS.95).aspx, đặc biệt là phần có nhãn "Forward Tài liệu tham khảo Với một ResourceDictionary":sử dụng đúng cách Merged Resource điển trong Silverlight 3

tài liệu tham khảo tài nguyên tĩnh từ bên trong bất kỳ từ điển tài nguyên cho phải tham khảo một tài nguyên đã được được xác định từ từ trước khi tham chiếu tài nguyên . Không thể giải quyết tham chiếu chuyển tiếp bằng tham chiếu tài nguyên tĩnh . Vì lý do này, nếu bạn sử dụng tài liệu tham khảo tài nguyên tĩnh bạn phải thiết kế cấu trúc từ điển tài nguyên bạn như vậy mà nguồn lực dành cho thêm by-sử dụng tài nguyên được định nghĩa tại hoặc gần đầu mỗi từ điển tài nguyên tương ứng.

Liệu này có nghĩa là tôi không thể làm điều gì đó như thế này trong App.xaml tôi:

<Application.Resources> 
    <ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="Assets/Colors.xaml"/> 
      <ResourceDictionary Source="Assets/Brushes.xaml"/> 
     </ResourceDictionary.MergedDictionaries> 
    </ResourceDictionary> 
</Application.Resources> 

đâu Brushes.xaml chứa SolidColorBrush, LinearColorBrush, vv, nghĩa là tham khảo các màu sắc được xác định trong Colours. xaml?

ví dụ:

<SolidColorBrush x:Key="OrangeRedBrush" Color="{StaticResource AppOrangeRed}"/> 

?

tôi xác định màu sắc của tôi trong Colors.xaml như:

<Color x:Key="AppOrangeRed">#FFBF3C1F</Color> 

Tôi nhận được một lỗi runtime nói rằng sản phẩm không thể tìm thấy một nguồn lực quan trọng với 'AppOrangeRed' ví dụ.

thực tiễn tốt nhất để tổ chức Màu sắc và Brushes để họ có thể được tái sử dụng là gì (nếu phù hợp, và tôi hiểu rằng màu sắc là cấu trúc và bàn chải là những đối tượng tham khảo, giải thích trong http://weblogs.manas.com.ar/spalladino/2009/03/02/silverlight-xaml-guidelines/)

Cảm ơn Rob

Trả lời

3

Rob,

Tôi hiểu tài liệu giống như cách bạn làm. Tôi nhận thấy rằng nó cũng có thể trao đổi các MergedDictionaries như vậy, và vẫn nhận được ngoại lệ thời gian chạy cùng:

<Application.Resources> 
    <ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="Assets/Brushes.xaml"/> 
      <ResourceDictionary Source="Assets/Colors.xaml"/> 
     </ResourceDictionary.MergedDictionaries> 
    </ResourceDictionary> 
</Application.Resources> 

Từ documentation dưới "Sáp nhập Resource điển":

Xét về tra cứu trình tự, từ điển MergedDictionaries chỉ được chọn sau khi kiểm tra tất cả các tài nguyên được khóa của ResourceDictionary đã khai báo MergedDictionaries. Sau đó, mỗi từ điển trong MergedDictionaries được chọn, theo nghịch đảo của thứ tự mà chúng được khai báo trong thuộc tính MergedDictionaries. Nói cách khác, logic truy xuất từ ​​bên trong bộ sưu tập các từ điển tài nguyên đã hợp nhất là cuối cùng, trước hết.

Dường như bạn có thể ghi đè một số Khóa nhất định được xác định trong ResourceDictionaries bằng cách bao gồm chúng theo thứ tự này, nhưng bạn không thể tham chiếu kiểu từ một từ điển được xác định trước một từ khác trong chuỗi tra cứu. Điều này là bực bội và không trực quan.

Tôi đoán điều này sẽ hữu ích nếu bạn có bộ sưu tập kiểu "xanh" và muốn ghi đè chúng bằng một bộ kiểu "màu cam" cho một ứng dụng khách khác. Bạn sẽ thực hiện điều này bằng cách bao gồm các phím màu cam bên dưới các phím màu xanh trong bộ sưu tập MergedDictionaries của bạn, vì vậy chúng được tìm thấy đầu tiên trong chuỗi tra cứu tài nguyên.

Dù sao, tôi chia sẻ sự thất vọng của bạn và hy vọng có một tính năng như thế này tại một thời điểm nào đó trong tương lai gần.

7

Tôi hiểu rõ hơn một chút. Nếu bạn có nhiều tài nguyên phạm vi ứng dụng đôi khi đề cập đến nhau, bạn cần (1) sắp xếp chúng trong từ điển chính được khai báo trong App.xaml, AND bạn cần bao gồm trong mỗi tệp mà phần kéo vào miếng. Vì vậy, nếu tôi có ba tệp chẳng hạn, Brushes.xaml, ScrollViewerStyles.xaml và ComboBoxStyles.xaml và ComboBoxStyles.xaml phụ thuộc vào hai bước trước, tôi sẽ cần phải chỉ cần thêm vào đầu tệp đó:

<ResourceDictionary.MergedDictionaries> 
    <ResourceDictionary Source="Brushes.xaml"/> 
    <ResourceDictionary Source="ScrollViewerStyles.xaml"/> 
</ResourceDictionary.MergedDictionaries> 
+0

Cảm ơn rcecil, Tôi đã gặp sự cố chính xác này. Ngay cả xuống đến thực tế là tập tin đầu tiên của tôi là màu sắc và bàn chải :) Câu trả lời đơn giản đẹp. Justin – Justin