2012-05-04 2 views
18

Я получаю ошибку, например: «Ссылка на тип не может найти общедоступный тип с именем« Знак »в xaml. как я могу его решить. класс 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. Проверьте помечается класс Signpublic
  3. Проверьте ли класс Sign имеет параметрируемый конструктор
+0

Вау! Параметрический конструктор! Спасибо. Интересно, почему такие странные требования и как вы узнали об этом? –

+2

Это требование основано на том факте, что вы не можете указывать параметры конструктора в XAML. Когда вы вводите

12

Для тех, кто в моей лодке, не помогли топ 1,00 результаты этой ошибки на Google ... В моем случае это было точной противоположностью совета от smelch: мне пришлось добавить информацию о сборке в конце моей декларации xmlns. Вероятно, из-за моих конкретных обстоятельств, я думаю, мой паттерн данных был в автономном файле xaml resourcedictionary. Не уверен. Я просто знаю, что это не сработало до Я добавил информацию о сборке, так что для тех, кто барахтался там, принести удар и посмотреть, работает ли он. Я не склонен погрузиться в то, почему, просто так.

+0

Я уточнил свой ответ. Вы просто опускаете имя сборки, если класс находится в той же сборке, что и XAML. – smelch

+4

Сам столкнулся с этой проблемой, * добавив * название сборки исправил проблему. Mine's в файле xagl ResourceDictionary в той же сборке, что и класс, но все же необходимо добавить имя сборки. –

+0

Спасибо! Я также использовал ResourceDictionary и хотел загрузить его динамически. Я просто добавил «; сборка = ...» и изменил процесс сборки на «Нет» вместо «Страница», и он отлично работал. По какой-то причине мне пришлось изменить процесс сборки, чтобы скомпилировать программу. В противном случае это породило бы странные ошибки. –

1
  1. Пройдите и проверьте все ответы на этот вопрос - я уверен, что один из них прав, но я не знаю, какой из них работал для меня.
  2. Сохраните проект, закройте Visual Studio, заново откройте Visual Studio.
  3. Voila, теперь он волшебным образом работает, несмотря ни на что ничего не меняя.
  4. Обругать Microsoft под нос, и носить с вашей жизнью ...
Смежные вопросы