Новое имя библиотеки пользовательского контроля WPF не существует в пространстве имен

Я новичок в WPF, и я пытаюсь разрешить ошибку. Я пытаюсь создать пользовательскую библиотеку управления, где я могу создавать свои собственные объекты управления. Когда я перейду в File > New Project > WPF Custom Control Library > [Enter name] > Save, то мгновенная ошибка:

The name "CustomControl1" does not exist in the namespace "clr-namespace:ProjectName"

Я не редактировал никакого кода, но сразу же ошибся. Для справки, ошибка находится внутри Generic.xaml.

<ResourceDictionary
       xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
       xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
       xmlns:local="clr-namespace:ProjectName">
       <Style TargetType="{x:Type local:CustomControl1}">  //<--Fails here
           <Setter Property="Template">
               <Setter.Value>
                   <ControlTemplate TargetType="{x:Type local:CustomControl1}">  // Fails here as well
                       <Border Background="{TemplateBinding Background}"
                               BorderBrush="{TemplateBinding BorderBrush}"
                               BorderThickness="{TemplateBinding BorderThickness}">

                       </Border>
                   </ControlTemplate>
               </Setter.Value>
            </Setter>
        </Style>
    </ResourceDictionary>

Я использую Visual Studio 12 и .NET 4. Любые идеи?

Ответ 1

Это ошибка IntelliSense, а не ошибка сборки, поэтому она не должна влиять на создание проекта. Чтобы устранить эту ошибку,

  • создать проект или
  • отредактируйте документ (например, удалив > из тега, а затем добавив его обратно).

Когда вы открываете документ, дизайнер XAML загружается в фоновом режиме для предоставления информации IntelliSense. Он загружает информацию для незастроенных типов (т.е. Типов, определенных в текущем решении, но которые еще не были встроены в сборку) асинхронно, и часто этот процесс завершается после того, как конструктор завершил первоначальный анализ документа.

Построение проекта приведет к созданию нестрогих типов (таким образом, устранению проблемы), и внесение существенного изменения в документ заставит конструктора повторно обработать документ с помощью новой информации о типе (в идеале документ должен быть репарации, когда информация о незастроенной типе становится доступной).

Ответ 2

По словам Джеймса Макнеллиса, в моем случае мне пришлось прокомментировать раздел XAML, вызвавший ошибку (поскольку ошибка не позволила перестроить), затем ЗАКРЫТЬ сам файл, поэтому его не открыть в VS, то я мог бы сделать успешную сборку. Затем я раскоментировал раздел XAML, и VS смог найти локальные классы... В случае, если кто-то наткнется на это. Visual Studio 2012 Express для Windows Desktop... BR,

Daniel

Ответ 3

Предполагая, что ваша сборка называется ProjectName, а ваше целевое пространство имен также называется ProjectName

Вы должны изменить следующее:

xmlns:local="clr-namespace:ProjectName">
от

до

xmlns:local="clr-namespace:ProjectName;assembly=ProjectName">

Ответ 4

Это также может произойти, если вы не пишете стиль по умолчанию для CustomControl в generic.xaml. Он генерирует что-то вроде этого в generic.xaml:

<Style TargetType="{x:Type local:MyCustomControl}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type local:MyCustomControl}">
                <Border Background="{TemplateBinding Background}"
                        BorderBrush="{TemplateBinding BorderBrush}"
                        BorderThickness="{TemplateBinding BorderThickness}">
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

вы можете найти этот фрагмент кода и изменить его или удалить.

Ответ 5

Убедитесь, что в CustomControl1 нет ошибок и проверьте ваше пространство имен.

Ответ 6

Восстановление и очистка несколько раз фиксировали проблему для меня.