2010-01-11 11 views
6

Tôi có các vấn đề sau, rất dễ tái sản xuất: Tôi đang tạo ứng dụng xaml sử dụng tài nguyên từ một tệp khác. Con đường để đi là để tạo ra một MergedDictionaries-tag để hợp nhất các nguồn lực địa phương và toàn cầu, như thế này:XAML - MergedDictionaries ném XmlParseException "mục đã được thêm vào". Tại sao?

<Window> 
<Window.Resources> 
    <ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="path.to.xaml.file"/> 
      <ResourceDictionary> 
       <Style TargetType="{x:Type Border}" x:Key="TypeBlock"> 

       </Style> 
       <Style TargetType="{x:Type Border}" x:Key="SetBlock"> 

       </Style> 
      </ResourceDictionary> 
     </ResourceDictionary.MergedDictionaries> 
    </ResourceDictionary> 
</Window.Resources> 
.... 
</Window> 

này đôi chút về mã sẽ sụp đổ nếu bạn chạy nó:

Item has already been added. Key in dictionary: 'System.Windows.Controls.Border' Key being added: 'System.Windows.Controls.Border' 

Nếu chúng ta xóa thẻ MergedDictionaries-tag, mã sẽ chạy như mong đợi:

<Window> 
<Window.Resources> 
    <Style TargetType="{x:Type Border}" x:Key="TypeBlock"> 

    </Style> 
    <Style TargetType="{x:Type Border}" x:Key="SetBlock"> 

    </Style> 
</Window.Resources> 
</Window> 

Tôi không hiểu tại sao nó ném ngoại lệ khi chúng tôi sử dụng Tài nguyên được hợp nhất. Tắt khóa học, bản sửa lỗi đủ dễ dàng ngay bây giờ (di chuyển tài nguyên xuống mức thấp hơn). Sẽ tốt hơn nếu biết hành vi này là 'bình thường' ...

+1

Thông tin bổ sung cho những người đang tìm kiếm thông báo lỗi cụ thể đó: Tôi gặp sự cố này khi vô tình sử dụng hai kiểu có cùng thuộc tính 'TargetType' và không có thuộc tính' x: Key'. Xóa một trong số chúng (ví dụ: bằng cách hợp nhất nội dung của nó với nhau) đã giải quyết vấn đề này cho tôi. – Jan

Trả lời

10

Nếu tài nguyên của bạn không nằm trong một tệp riêng biệt, thì chúng không phải là một phần của từ điển được hợp nhất. Di chuyển chúng ra bên ngoài như thế này:

<Window.Resources> 
    <ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="path.to.xaml.file"/> 
     </ResourceDictionary.MergedDictionaries> 

     <Style TargetType="{x:Type Border}" x:Key="TypeBlock"> 

     </Style> 
     <Style TargetType="{x:Type Border}" x:Key="SetBlock"> 

     </Style> 
    </ResourceDictionary> 
</Window.Resources> 

Điều đó cho biết, thông báo lỗi có thể gây hiểu lầm và có thể là kết quả của lỗi trong trình biên dịch XAML.

+0

Ok tôi hiểu, cảm ơn thông tin! – RoelF

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