Несоответствие между XAML intellisense и компилятором для элемента управления - PullRequest
1 голос
/ 01 марта 2012

Я конвертирую немного Silverlight XAML в WPF.В настоящее время у меня есть пользовательский элемент управления (MyControl), который пытается включить несколько других элементов управления, которые представляют собой пользовательские кнопки (MyButton1), которые находятся в той же сборке.У меня есть следующий XAML, который компилируется и работает в SL:

MyButton1

<UserControl
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    x:Class="MyCompany.MyNamespace.MySubnamespace.MyButton1"
    d:DesignWidth="640" d:DesignHeight="480">
    ...
</UserControl>

MyControl

<UserControl
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:somename="clr-namespace:MyCompany.MyNamespace.MySubnamespace;assembly=MyCompany.MyAssemblyName"
    mc:Ignorable="d"
    x:Class="MyCompany.MyNamespace.MySubnamespace.MyControl"
    d:DesignWidth="640" d:DesignHeight="480">

    <somename:MyButton1 />

</UserControl>

Когда я пытаюсь скомпилировать этот код в WPF, я получаю следующую ошибку:

Тег 'MyButton1' не существует в пространстве имен XML 'clr-namespace: MyCompany.MyNamespace.MySubnamespace; assembly = MyCompany.MyAssemblyName. '

Странная вещь, если я закомментирую строку кода <somename:MyButton1 /> и скомпилирую, а затем введу <somename: IntelliSense дает мне возможность автозаполнения MyButton1.Это говорит о том, что сам элемент управления находится в сборке, но по какой-то причине его не видно при компиляции MyControl XAML.

Для некоторого контекста я взял файл SL csproj и внес некоторые изменения вэто вручную, чтобы сделать его файлом WPF csproj.Если есть вероятность, что это вызвало такую ​​причуду, я был бы рад поделиться соответствующими частями файла проекта.

Ответы [ 2 ]

1 голос
/ 01 марта 2012

Чтобы сослаться на текущую сборку, вы не должны вводить ее имя, а оставлять ее незаполненной, т. Е. assembly=, другой вариант, конечно, удалить ее полностью.( MSDN -> Отображение на текущие сборки )

1 голос
/ 01 марта 2012

Нашел ответ на форуме MSDN.Оказывается, что строка assembly=MyCompany.MyAssemblyName в моих xmlns все испортила.После удаления этой строки я смог ссылаться на элементы управления.

Ссылки по теме: http://social.msdn.microsoft.com/Forums/en/wpf/thread/807c9b80-81c7-4f75-aa2f-8427e17b1a90

...