2012-05-04 29 views
18

Tôi nhận được lỗi như "Loại tham chiếu không thể tìm thấy loại công khai có tên 'Đăng nhập'" trong xaml. làm thế nào tôi có thể giải quyết nó. lớp Sign nằm trong cùng một assembly.Loại tham chiếu không thể tìm thấy loại công khai có tên

<DataTemplate DataType="{x:Type local:Sign}"> 
    <Expander Padding="4" 
       IsExpanded="{Binding RelativeSource={ 
        RelativeSource Mode=FindAncestor, AncestorType={ 
         x:Type ListBoxItem}}, Path=IsSelected}"> 
     <Expander.Header> 
      <TextBlock Text="{Binding Name}" ... /> 
     </Expander.Header> 
     <DockPanel LastChildFill="True"> 
      <Border DockPanel.Dock="Left" CornerRadius="16" BorderBrush="WhiteSmoke" Background="AliceBlue" BorderThickness="5" HorizontalAlignment="Center" VerticalAlignment="Center"> 
       <Image Source="{Binding Icon}" Width="90" Height="90" Stretch="Fill" /> 
      </Border> 
      ... 
     </DockPanel>     
    </Expander> 

+4

Bạn có nhớ thêm không gian tên cục bộ ở trên cùng như thế này không? 'xmlns: local =" clr-namespace: MyNamespace "' –

Trả lời

45

Nếu loại nằm trong cùng một cụm như XAML bạn đang sửa đổi, hãy bỏ qua phân đoạn lắp ráp của không gian tên clr khi bạn nhập không gian tên.

DO

xmlns:local="clr-namespace:NamespaceContainingSignClass" 

KHÔNG

xmlns:local="clr-namespace:NamespaceContainingSignClass;assembly=AssemblyContainingSignClassAndXAML" 
+0

Điều đó làm việc cho tôi. Bạn có thể giải thích tại sao không thể tìm thấy tham chiếu kiểu khác không? –

+1

@DennisKassel Tôi không biết tại sao nó hoạt động theo cách đó. Nếu tôi suy đoán, tôi sẽ nói nếu assembly bị bỏ qua, nó tìm kiếm assembly có chứa XAML, và nếu assembly được chỉ rõ, nó xem qua các assembly được tham chiếu cho assembly đã được chỉ định và tìm kiếm thông qua đó. Kể từ khi hội đồng hiện tại không có trong hội đồng tham chiếu, nó không thể tìm thấy nó. Một cái gì đó kỳ lạ như thế trong việc thực hiện hiện tại. – smelch

+0

Cảm ơn bạn đã bình luận. Một vài ngày trước, tôi cũng có một xác nhận từ một cuốn sách mà bạn phải bỏ qua tên lắp ráp khi không gian tên nằm trong cùng một hội đồng. –

6
  1. Kiểm tra xem thẻ thư mục gốc của tập tin XAML có không gian tên với lớp Sign ánh xạ tới local bí danh: xmlns:local="clr-namespace:NamespaceContainingSignClass"
  2. Kiểm tra xem lớp Sign được đánh dấu public
  3. Kiểm tra xem lớp Sign có hàm tạo tham số
+0

Chà! Nhà xây dựng không có tham số! Cảm ơn bạn. Tôi tự hỏi tại sao một yêu cầu kỳ lạ như vậy và làm thế nào bạn tìm hiểu về nó? –

+2

Yêu cầu này dựa trên thực tế là bạn không thể chỉ định tham số hàm tạo trong XAML. Khi bạn nhập

12

Đối với những người trong thuyền của tôi, người đã không giúp được 1,00 kết quả đầu cho lỗi này trên Google ... .trong trường hợp của tôi nó là đối diện chính xác của lời khuyên từ smelch: tôi đã phải ADD thông tin lắp ráp vào cuối tuyên bố xmlns của tôi. Có thể vì hoàn cảnh cụ thể của tôi, tôi đoán - bảng dữ liệu của tôi nằm trong tệp xaml có nguồn gốc độc lập. Không chắc. Tôi chỉ biết nó đã không làm việc cho đến khi tôi đã thêm thông tin lắp ráp, vì vậy đối với những người lúng túng ra có cung cấp cho rằng một Whack và xem nếu nó hoạt động. Tôi không có khuynh hướng tìm hiểu lý do tại sao, nó đã làm.

+0

Tôi đã làm rõ câu trả lời của mình. Bạn chỉ bỏ qua tên assembly nếu class nằm trong cùng assembly với XAML. – smelch

+4

Sau khi tự mình gặp sự cố này, * thêm * tên lắp ráp đã khắc phục sự cố. Của tôi trong một tập tin xaml ResourceDictionary trong cùng một hội đồng như lớp, nhưng vẫn cần tên lắp ráp để được thêm vào. –

+0

Cảm ơn bạn! Tôi cũng đã sử dụng một ResourceDictionary và muốn tải nó tự động. Tôi vừa thêm "; assembly = ..." và thay đổi quá trình build thành "None" thay vì "Page" và nó hoạt động tốt. Đối với một số lý do tôi đã phải thay đổi quá trình xây dựng để biên dịch chương trình. Nếu không nó sẽ có những lỗi lạ. –

1
  1. Đi qua và kiểm tra tất cả các câu trả lời cho câu hỏi này - Tôi chắc chắn một trong số đó là đúng, nhưng tôi không biết cái nào phù hợp với tôi.
  2. Lưu dự án của bạn, đóng Visual Studio, mở lại Visual Studio.
  3. Thì đấy, bây giờ nó hoạt động kỳ diệu, mặc dù không thay đổi gì cả.
  4. Thề với Microsoft dưới hơi thở của bạn và tiếp tục với cuộc sống của bạn ...
Các vấn đề liên quan