Конструктор XAML не может найти тип, когда преобразователи находятся в UserControl.Resources

У меня есть WPF UserControl с конвертерами привязки, на которые ссылаются следующим образом:

<UserControl x:Class="MyControl" x:Name="MyControl"
   xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
   xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
   xmlns:local="clr-namespace:TheMainNamespaceOfThisAssembly">

    <UserControl.Resources>
      <local:ConfidenceColorConverter x:Key="ConfidenceColorConverter"/>
    </UserControl.Resources>

Затем я использую конвертер привязок позже. Я вижу пользовательский элемент управления в моем окне дизайна. Затем я компилирую и помещаю этот пользовательский элемент управления в свое главное окно. Запускаю, работает. Тем не менее, я все же хотел бы использовать дизайнер в главном окне, которое не работает с:

Не удалось создать экземпляр типа MyControl.

Итак, я узнал , как отлаживать конструктор; когда я это сделаю, я получаю исключение XamlParseException:

Не удается найти тип TheMainNamespaceOfThisAssembly.ConfidenceColorConverter. Сборка, используемая при компиляции, может отличаться от сборки, используемой при загрузке, и тип отсутствует. Ошибка в файле разметки ...

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

Не удалось понять, была ли статья Устранение сбоев загрузки WPF Designer применяется или нет.


person Patrick Szalapski    schedule 18.02.2010    source источник
comment
Я не мог получить никакой ошибки из-за схожего имени класса и ключа, поэтому я удалил свой ответ. Я должен спросить очевидное: у вас действительно есть класс с именем ConfidenceColorConverter в сборке, верно? Это публично?   -  person Joel B Fant    schedule 18.02.2010
comment
Да; ConfidenceColorConverter, MyControl и MainWindow находятся в одном проекте с пространством имен проекта TheMainNamespaceOfThisAssembly.   -  person Patrick Szalapski    schedule 19.02.2010
comment
Пожалуйста, попробуйте воспроизвести это на чистом проекте. Это не должно дать сбой, поэтому важно воспроизвести его без каких-либо побочных эффектов проекта.   -  person Sander    schedule 26.02.2010
comment
Хорошо, это работает. Где я могу найти причины побочных эффектов?   -  person Patrick Szalapski    schedule 01.03.2010
comment
Он не компилируется или отображается только в дизайнере? Какие платформы определены для сборки?   -  person Danny Varod    schedule 01.03.2010
comment
Да, только дизайнер дает мне проблему. Моя активная платформа - Any CPU - не представляете, что это на что-нибудь повлияет?   -  person Patrick Szalapski    schedule 01.03.2010
comment
Попробуйте очистить решение, проверьте Configuration Manager на согласованность настроек для всех проектов в решении. Попробуйте переименовать классы / ключи конвертера - я видел странные конфликты при обращении к одному и тому же ResourceDictionary более одного раза.   -  person Stanislav Kniazev    schedule 01.03.2010
comment
Вы нашли на это ответ?   -  person Jason Coyne    schedule 31.03.2010


Ответы (2)


Не могли бы вы попытаться воспроизвести проблему в новом проекте, а не редактировать существующий? Вы не можете иметь

<UserControl x:Class="MyControl" x:Name="MyControl"...

так как вам нужно будет добавить пространство имен к «x: class» и изменить значение «x: Name», чтобы оно отличалось от имени класса. Дизайнер отлично работает, когда я создаю чистый проект, когда вы описываете и исправляете такого рода ошибки. Возможно, вы опускаете некоторые детали из вопроса, который считаете неважным, но они могут иметь решающее значение.

person Stanislav Kniazev    schedule 26.02.2010
comment
Попробуйте использовать соглашение об именах, в котором частные поля и ключи XAML - это camelCase, а классы и типы - PascalCase. - person Danny Varod; 28.02.2010
comment
Я попытался изменить имя x: на thisControl, сохранив MyControl в качестве имени класса. Я попытался создать новый проект с конвертером в качестве ресурса, используемого для привязки внутри пользовательского элемента управления, и пользовательского элемента управления, используемого в окне. Это действительно работает, как говорит Станислав. Затем я упростил свое окно и пользовательский элемент управления в исходном проекте до ничего, кроме необходимых пространств имен и XAML (соответствующих почти пустому испытательному проекту), и все равно получаю сообщение об ошибке. Я собираюсь вырвать код программной части пользовательского элемента управления до минимума. - person Patrick Szalapski; 01.03.2010
comment
Спасибо за вашу помощь, и я был бы рад опубликовать пропущенные детали, если бы знал, какими они могут быть. - person Patrick Szalapski; 01.03.2010
comment
Ну, я не могу понять. Тестовый проект работает, а реальный - нет. Не знаю, какие еще отличия попробовать изменить. - person Patrick Szalapski; 01.03.2010

Поговорив с другими, разработчик VS2008 столкнулся с многочисленными проблемами, которые не позволяют использовать его во многих ситуациях. Мы сдались.

Обновление: похоже, что некоторые, особенно Джоэл Кокран, используют представление дизайна Expression Blend с большим успехом, если вы подчиняетесь его четыре принципа MVVM в разработке XAML.

person Patrick Szalapski    schedule 19.04.2010