9

Trong WPF có thể tổ chức XAML cho nhiều điều khiển người dùng bằng cách giữ đánh dấu trong các tệp XAML riêng biệt trong thư mục chủ đề và sau đó sử dụng MergedDictionaries để nhập chúng vào generic.xaml:Sử dụng MergedDictionaries trong generic.xaml trong Silverlight 3

<ResourceDictionary> 
    <ResourceDictionary.MergedDictionaries> 
     <ResourceDictionary Source="MyFirstControl.xaml" /> 
     <ResourceDictionary Source="MySecondControl.xaml" /> 
    </ResourceDictionary.MergedDictionaries> 
</ResourceDictionary> 

Với sự sẵn có của Silverlight 3 beta giới thiệu hỗ trợ từ điển đã hợp nhất, có vẻ như có thể thực hiện tương tự với điều khiển người dùng Silverlight. Nhưng mặc dù cố gắng tất cả các kết hợp của hành động xây dựng trên các tập tin từ điển hợp nhất và cú pháp tương ứng cho nguồn tham khảo trong generic.xaml, tôi dường như không thể làm cho nó hoạt động.

Có ai khác đã thử không? Có ai biết nếu nó là có thể và nếu như vậy những gì tôi đang làm sai?


OK - vì vậy sau khi rất nhiều dự án kiểm tra, lấy mẫu làm việc trong WPF và di chuyển XAML và C# code trên để Silverlight 3 và nó vẫn thất bại, tôi đã làm một gỡ bỏ cài đặt đầy đủ và cài đặt lại của tất cả các Silverlight 2 bit VÀ TẤT CẢ các bit beta Silverlight 3 và cuối cùng có những thứ làm việc.

Tôi chỉ có thể giả định rằng bằng cách nào đó tôi đã cài đặt phiên bản beta bị lỗi - tôi không biết nhưng có vẻ như tôi vẫn đang chạy trong thời gian chạy Silverlight 2 mặc dù dường như đã cài đặt thời gian chạy phiên bản 3.

Cảm ơn Jared đã xem xét mọi thứ và kiểm tra với nhóm SL3 ... và nhờ Amy DullardShawn Wildermuth để tạo hướng dẫn và tệp hàng loạt để chạy Silverlight 2 & 3 trên cùng một máy.

Trả lời

12

Tôi chỉ cố gắng sau đây trong một điều khiển người dùng và nó làm việc:

<UserControl.Resources> 
    <ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="ResourcesA.xaml" /> 
      <ResourceDictionary Source="ResourcesB.xaml" /> 
     </ResourceDictionary.MergedDictionaries> 
    </ResourceDictionary> 
</UserControl.Resources> 
<StackPanel> 
    <Rectangle Width="100" Height="100" Fill="{StaticResource ResAColor}" /> 
    <Rectangle Width="100" Height="100" Fill="{StaticResource ResBColor}" /> 
</StackPanel> 

Nhưng bạn đặc biệt đề cập đến generic.xaml. Bạn đang gặp phải vấn đề gì?

- EDIT

Dựa trên những ý kiến ​​bổ sung, tôi đã nói chuyện với đội ngũ SL3 và nhận được câu trả lời sau đây:

trình đối với tôi, sử dụng generic.xaml biên soạn như một tài nguyên, và sử dụng cú pháp đầy đủ tài nguyên. Có một lỗi trên không có khả năng sử dụng URI tương đối cho Source trong generic.xaml (31.783) nhưng hình thức không liên quan nên chỉ làm việc tốt

<ResourceDictionary Source='/SilverlightClassLibrary1;component/CustomControl.xaml'/> 

trong generic.xaml, và sửa đổi xây dựng hành động cho cả generic.xaml và CustomControl.xaml thành Tài nguyên. Hãy cho tôi biết nếu vẫn còn gặp rắc rối - nếu bạn nhận được một repro, tôi có thể xem nó.

Điều đó có hữu ích không?

+0

Tôi đã có ấn tượng rằng MergedDictionaries không được hỗ trợ trong Silverlight. Đây có phải là mới trong SL3? – Rich

+0

Có, mới đối với SL3. –

+0

Có - Tôi không gặp vấn đề gì khi sử dụng các tài nguyên được gộp chung - nhưng cố gắng sử dụng các tệp xaml riêng biệt cho các kiểu/mẫu của các usercontrols khác nhau và đưa chúng lại với nhau dưới dạng các từ điển được hợp nhất trong tệp generic.xaml. –

1

Nếu MySecondControl.xaml sử dụng tài nguyên từ MyFirstControl.xaml thứ tự bạn thêm chúng vào ResourceDictionary của generic.xaml sẽ không thành vấn đề. Bạn sẽ cần phải bao gồm một cách dư thừa MyFirstControl.xaml trong số MySecondControl.xaml. MySecondControl.xaml nên chứa:

<ResourceDictionary.MergedDictionaries> 
    <ResourceDictionary Source='/MyControls;component/Themes/MyFirstControl.xaml'/> 
</ResourceDictionary.MergedDictionaries> 
<!-- ... Contents of MySecondControl.xaml --> 
0

Tôi vừa mới giải quyết vấn đề này. ResourceDictionaries hỗ trợ MergedDictionaries, nhưng cho các tùy chỉnh templated controls bằng Generic.xaml, Generic.xaml không hỗ trợ MergedDictionaries. Vì vậy, có hai lựa chọn: (1) bạn hoặc là chồng tất cả các mẫu của bạn vào Generic.xaml; hoặc (2) bạn tạo YourOwnDictionary.xaml, hợp nhất tất cả các từ điển riêng biệt của bạn vào YourOwnDictionary.xaml, và tham khảo YourOwnDictionary.xaml từ các usercontrols và các trang. Đây dường như là một tính năng/lỗi từ các phiên bản Silverlight trước đó không hỗ trợ các từ điển đã hợp nhất.

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