Подтвердить что ты не робот

Добавление пользовательского пространства имен в xaml

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

xmlns:myns="clr-namespace:LibNameSpace" 

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

< Window x:Class="LibNameSpace.MainWindow"

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

Undefined пространство имен CLR. URI "clr-namespace" относится к пространству имен "LibNameSpace", которое не входит в сборку.

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

4b9b3361

Ответ 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"

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