Добавление пользовательского пространства имен в xaml
Я новичок в С#, WPF и XAML, поэтому я не могу использовать правильные условия, чтобы задать правильный вопрос =)
Я пытаюсь добавить свое собственное пространство имен в свой файл xaml, чтобы легко использовать мой собственный класс. Думаю, причина в том,
Для этого я написал следующий код в теге окна:
xmlns:myns="clr-namespace:LibNameSpace"
Где мой тег окна также начинается со следующего определения:
< Window x:Class="LibNameSpace.MainWindow"
Я хочу использовать класс LibNameSpace:Class1
, и я надеялся написать myns:Class1
для этого. Однако эта команда вызывает эту ошибку:
Undefined пространство имен CLR. URI "clr-namespace" относится к пространству имен "LibNameSpace", которое не входит в сборку.
Как я могу это исправить?
Ответы
Ответ 1
Имя LibNameSpace звучит как его библиотека в другой сборке. Если это так, вы должны добавить имя сборки:
xmlns:myns="clr-namespace:LibNameSpace;assembly=MyLibAssembly
Update:
Имя сборки можно найти в проекте-проводнике на экране свойств проекта (библиотеки-сборки). В общем случае имя файла dll без dll
-suffix представляет имя сборки.
Ответ 2
Потому что для меня это не совсем понятно, что вы хотите сделать, вот еще одна попытка:
Если MyLibAssembly
является основным пространством имен вашего приложения, и там у вас есть окно с именем MainWindow
и класс с именем Class1
, который вы хотите создать в своем MainWindow
-class:
- Убедитесь, что в Class1 нет
ошибка, проект должен
скомпилировать без ошибок. Сначала удалите
декларация пространства имен из xaml и скомпилировать ваши
проект, пока у вас нет ошибок компиляции.
- Убедитесь, что Class1 является общедоступным и
имеет конструктор без параметров
- Убедитесь, что в коде
ваш MainWindow также находится в
MyLibAssembly
-namcespace.
- Добавьте затем декларацию namspace
xmlns:local="clr-namespace:LibNameSpace
в ваш xaml. local
обычно
используется для объявления того же пространства имен, что и текущий элемент, в вашем случае находится окно.
- Вставьте
Class1
с помощью
<local:Class1/>
-tag в xaml. Если Class1 не выводится из FrameworkElement или элемента управления более высокого уровня, вы должны добавить его в раздел ресурсов вашего окна. Если это так, дайте ему ключ. <local:Class1 x:Key="KeyToYourClass"/>
Возможно, vs не синхронизирован. Нажмите в решении-проводнике на корневом node Чистое решение, а затем Восстановить решение. Возможно, это помогает.
Надеюсь, это помогло. Если нет, попробуйте переформатировать свой вопрос (используйте кодовый символ, чтобы сделать вопрос более читабельным и попробуйте перефразировать, чтобы более четко понять, каково ваше желание).
Ответ 3
Используйте Intellisense. В моем случае имело место одно пространство. вместо
xmlns:local="clr-namespace:DataAccess;assembly=DataAccess"
Я набираю текст
xmlns:local="clr-namespace:DataAccess; assembly=DataAccess"
Обратите внимание на пробел после ';'
. Это имело значение. Поэтому используйте визуальную студию Intellisense, и она предоставит вам правильную разметку xaml.
Ответ 4
Я нашел этот ответ, когда я боролся с проблемами в Windows 8. Я пытался использовать User Control, и у меня было несколько ошибок. Последние, где:
Ошибка 9 Невозможно добавить "ScrollControl" в свойство коллекции "Дети", тип должен быть "UIElement"
и
Ошибка 10 Неизвестный тип 'ScrollControl' в пространстве имен XML 'clr-namespace: EventTests.Controls; assembly = EventTests, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = null'
ScrollControl - это мое пользовательское управление.
В итоге я заменил это:
xmlns:Controls="clr-namespace:EventTests.Controls"
Для этого:
xmlns:Controls="using:EventTests.Controls"
Надеюсь, это экономит время, проведенное с этой проблемой.