добавление пользовательского пространства имен в xaml - PullRequest
12 голосов
/ 21 июля 2010

Я новичок в C #, WPF и XAML, поэтому я не смогу использовать правильные термины, чтобы задать правильный вопрос =) Я пытаюсь добавить свое собственное пространство имен в свой файл xaml, чтобы легко использовать свой собственный класс - я думаю, причина в этом - Я написал следующий код в теге окна для этого:

xmlns:myns="clr-namespace:LibNameSpace" 

Где мой оконный тег также начинается со следующего определения:

< Window x:Class="LibNameSpace.MainWindow"

Я хочу использовать класс LibNameSpace:Class1, и я надеялся написать для этого myns:Class1. Однако эта команда вызывает эту ошибку:

Неопределенное пространство имен CLR. URI «clr-namespace» относится к пространству имен «LibNameSpace», которое не включено в сборку.

Как я могу это исправить?

Ответы [ 4 ]

28 голосов
/ 21 июля 2010

Имя LibNameSpace звучит как библиотека в другой сборке. Если это так, вы должны добавить название сборки:

xmlns:myns="clr-namespace:LibNameSpace;assembly=MyLibAssembly

Обновление:

Название сборки можно найти в Project-Explorer на экране свойств проекта (библиотеки-сборки). В общем, также имя файла dll без dll -суффикса представляет имя сборки.

10 голосов
/ 21 июля 2010

Потому что для меня не совсем понятно, что вы хотите сделать, вот еще одна попытка:

Если MyLibAssembly является основным пространством имен вашего приложения, и у вас есть окно с именем MainWindow и класс с именем Class1, который вы хотите создать в своем классе MainWindow:

  • Убедитесь, что в Class1 нет ошибка, проект должен компилировать без ошибок. Удалить сначала Объявление пространства имен из XAML и скомпилируйте проект, пока у вас нет ошибок компиляции.
  • Убедитесь, что Class1 является публичным и имеет конструктор без параметров
  • Убедитесь, что в коде позади Ваше главное окно также находится в MyLibAssembly -namcespace.
  • Добавьте затем объявление namspace xmlns:local="clr-namespace:LibNameSpace в ваш xaml. local обычно используется для объявления того же пространства имен, что и текущий элемент, в вашем случае это окно.
  • Вставьте Class1 с помощью <local:Class1/> -тег в xaml. Если Class1 не является производным от FrameworkElement или элемента управления более высокого уровня, вы должны добавить его в раздел ресурсов вашего окна. Если это правда, дайте ему ключ. <local:Class1 x:Key="KeyToYourClass"/>

Возможно, vs не синхронизирован. Щелкните в обозревателе решений в корневом узле Чистое решение , а затем Перестройте решение . Может быть, это поможет.

Надеюсь, это помогло. Если нет, попробуйте переформатировать ваш вопрос (используйте кодовый символ, чтобы сделать вопрос более читабельным, и попробуйте перефразировать, чтобы прояснить, что вы хотите).

6 голосов
/ 13 июня 2012

Используйте Intellisense. В моем случае одно место имело значение. вместо

xmlns:local="clr-namespace:DataAccess;assembly=DataAccess"

Я вручную набрал

xmlns:local="clr-namespace:DataAccess; assembly=DataAccess"

Обратите внимание на пробел после ';'. Это имело значение. Так что используйте визуальную студию Intellisense, и она предоставит вам правильную разметку xaml.

4 голосов
/ 05 декабря 2012

Я нашел этот ответ, когда боролся с проблемами в Windows 8. Я пытался использовать пользовательский элемент управления, и у меня было несколько ошибок.Последние, где:

Ошибка 9 Невозможно добавить 'ScrollControl' в свойство коллекции 'Children', тип должен быть 'UIElement'

и:

Ошибка 10 Неизвестный тип «ScrollControl» в пространстве имен XML «clr-namespace: EventTests.Controls; сборка = EventTests, версия = 1.0.0.0, культура = нейтральная, PublicKeyToken = ноль»

ScrollControl - мой пользовательский элемент управления.

В итоге я заменил это:

xmlns:Controls="clr-namespace:EventTests.Controls"

Для этого:

xmlns:Controls="using:EventTests.Controls"

Надеюсь, это сэкономит время, которое я провел с этимвыпуск.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...