WPF: пользовательское пространство имен XAML - PullRequest
2 голосов
/ 21 марта 2009

Хорошо, у меня есть окно в WPF. Я добавляю в него следующую строку:

xmlns:controls="clr-namespace:mCubed.Controls"

Это компилируется и работает просто отлично, но дизайнер Visual Studio выдает мне эту ошибку:

Не удалось загрузить файл или сборку 'mCubed, версия = 1.0.0.0, культура = нейтральная, PublicKeyToken = null' или одна из ее зависимостей. Система не может найти указанный файл.

Когда я удаляю эту строку из окна, она компилируется и работает просто отлично, а дизайнер Visual Studio работает как шарм!

Я не понимаю, почему эта строка ломает конструктор? Это происходит REGARDLESS , если я поместил следующую строку в текст документа XAML.

<controls:MyControl/>

Все мои файлы .cs находятся в одном проекте VS. У меня есть пространство имен mCubed, которое содержит мой умно названный класс mCubedWindow. У меня есть все мои классы управления, определенные в пространстве имен mCubed.Controls. НЕ говорите мне, что это проблема сборки, ВСЕ МОИ ФАЙЛЫ В ТО ЖЕ ПРОТИВ ПРОЕКТА!

Ответы [ 4 ]

5 голосов
/ 21 марта 2009

Не проблема сборки, просто проблема дизайнера. Дизайнер VS WPF в 2008 году в лучшем случае примитивен - ИМХО совершенно бесполезен. Я полностью отключаю его и использую редактор XML. Надеюсь, что в 2010 году ситуация значительно улучшится.

2 голосов
/ 21 марта 2009

MyControl находится в той же сборке, что и окно? Если это не так, вам нужно включить имя сборки в объявление:

xmlns:controls="clr-namespace:mCubed.Controls;assembly=mCubed"
1 голос
/ 21 марта 2009

Это немного странно. Я разработал несколько проектов, которые делают именно это. Вот быстрый проект-пустышка, все в одном .exe:

Сначала UserControl с парой кнопок:

<UserControl x:Class="WpfApplication1.UserControl1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <Grid Width="30">
        <Button HorizontalAlignment="Left">A</Button>
        <Button HorizontalAlignment="Right">B</Button>
    </Grid>
</UserControl>

Теперь главное окно с моим управлением добавлено к нему:

<Window x:Class="WpfApplication1.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:p="clr-namespace:WpfApplication1"
    Title="Window1" Height="300" Width="300">
    <Grid>
        <p:UserControl1/>
    </Grid>
</Window>

Нет сообщений об ошибках.

0 голосов
/ 26 июля 2009

Является ли XAML свободным (действие по сборке: Нет, нет кода позади) или скомпилировано (действие по сборке: Page, Может иметь код позади)?

Если XAML свободен или MyControl находится в другой сборке, вы должны указать, в какой сборке находится MyControl, как сказал Дэниэл Пратт:

xmlns:controls="clr-namespace:mCubed.Controls;assembly=mCubed"

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

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