2012-05-04 81 views
18
的公共類型

我在xaml中收到類似「類型引用無法找到名爲'Sign'的公共類型」的錯誤。我該如何解決它。 Sign類在同一個程序集中。類型引用無法找到名爲

<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

你記得在這樣的頂部添加本地命名空間? 'xmlns:local =「clr-namespace:MyNamespace」' –

回答

45

如果類型與正在修改的XAML駐留在相同的程序集中,請在導入名稱空間時省略clr命名空間的程序集段。

DO

xmlns:local="clr-namespace:NamespaceContainingSignClass" 

切勿

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

這對我有效。你能提供一個解釋爲什麼不能找到類型引用嗎? –

+1

@ DennisKassel我不知道它爲什麼會這樣。如果我想推測,我會說如果省略了程序集,它將搜索包含XAML的程序集,並且如果指定了程序集,它將通過引用程序集查找指定的程序集並搜索該程序集。由於當前程序集不在引用的程序集中,因此無法找到它。在當前的實現中有些奇怪。 – smelch

+0

感謝您的評論。幾天前,我還得到了一本書的確認,當名稱空間駐留在同一個程序集中時,您必須省略程序集名稱。 –

6
  1. 檢查XAML文件的根標籤與Sign類的命名空間映射到local別名:xmlns:local="clr-namespace:NamespaceContainingSignClass"
  2. 檢查類Sign是否標記public
  3. 檢查是否級Sign有無參數構造函數
+0

哇!無參數構造函數!謝謝。我想知道爲什麼這麼奇怪的要求,你是如何瞭解它的? –

+2

此要求基於您無法在XAML中指定構造函數參數的事實。當您在XAML中輸入

12

對於那些在我的船誰沒有被頂1,00結果在谷歌這個錯誤幫助... 。在我的情況下,這是來自錫的建議的完全相反:我不得不在我的xmlns聲明的末尾添加彙編信息。可能是因爲我的特殊情況,我猜 - 我的datatemplate是獨立的resourcedictionary xaml文件。不確定。我只知道它沒有工作直到我加入了程序集信息,所以對於那些在那裏掙扎的人來說,重擊一下,看看它是否有效。我不想深究爲什麼,它只是做了。

+0

我澄清了我的答案。如果類與XAML在同一個程序集中,則只能省略程序集名稱。 – smelch

+4

自己遇到這個問題,*添加*程序集名稱也解決了這個問題。我的ResourceDictionary xaml文件與類相同,但仍需要添加程序集名稱。 –

+0

謝謝!我也使用了ResourceDictionary,並想動態加載它。我只是添加「;程序集= ...」,並將構建過程更改爲「無」而不是「頁面」,它工作正常。出於某種原因,我必須更改構建過程才能編譯程序。否則它會拋出奇怪的錯誤。 –

1
  1. 通過並檢查所有這個問題的答案 - 我確定其中一個答案是對的,但我不知道哪一個爲我工作。
  2. 保存您的項目,關閉Visual Studio,重新打開Visual Studio。
  3. 瞧,它現在神奇地工作,儘管沒有改變任何東西。
  4. 罵微軟在你的呼吸,並用自己的生命進行...
相關問題