Как я могу заставить Visual Studio 2010 «Добавить пользовательский элемент управления» создать элемент управления WPF? - PullRequest
3 голосов
/ 14 мая 2011

У меня есть библиотека классов, которую я создал с помощью шаблона проекта «Библиотека классов».Если я щелкну правой кнопкой мыши по этой библиотеке в обозревателе решений и выберу «Добавить> Контроль пользователя», Visual Studio добавит WinForms UserControl.Это не то, что я хочу - я хочу, чтобы «Добавить> Пользовательский элемент управления» добавил пользовательский элемент управления WPF.

Я уже добавил ссылки на сборки WPF (WindowsBase, PresentationFramework и PresentationCore), и я ужеесть некоторые WPF UserControls в этой библиотеке, и все компилируется.Моя библиотека не имеет ссылок на сборки WinForms (System.Drawing и System.Windows.Forms).Но, по-видимому, правильные ссылки не являются достаточной подсказкой для Visual Studio, потому что когда я пытаюсь добавить> Пользовательский элемент управления, он добавляет ссылки WinForms в мой проект, а затем создает WinForms UserControl.

Я могу добавитьПользовательский контроль WPF в моем проекте приложения WPF, а затем переместить его в мою библиотеку.Но это боль, и я бы предпочел, чтобы она сначала работала должным образом.

Я думаю, что, возможно, мне не хватает какого-то непонятного XML-элемента в моем файле .csproj, который сообщает Visual Studio, какой дизайнериспользуйте по умолчанию, и если я добавлю правильный элемент XML с правильным загадочным GUID, он начнет работать правильно.Если бы я мог создать новую библиотеку управления WPF, я мог бы сравнить два файла проекта и выяснить это.Однако я использую Visual C # Express, в котором нет шаблона для проекта библиотеки управления WPF, поэтому мне не повезло.

Что мне нужно сделать с моей библиотекой классов.файл csproj, чтобы VS2010 в Add> New User Control добавлял WPF UserControl?

1 Ответ

7 голосов
/ 14 мая 2011

В файле проекта есть идентификаторы классов подпроектов, которые влияют на контекстные меню Visual Studio и поведение проекта в целом. Самое простое, что нужно сделать, это воссоздать проект как:

  • Библиотека управления пользователями WPF

вместо "Библиотеки классов". Это возможно, если вы уже создали проект для редактирования в идентификаторах классов подпроекта вручную, открыв файл «.csproj» в текстовом редакторе, таком как сама Visual Studio, но его легко причинить больше ущерба, чем исправить.

Я верю, но не проверял, что другой тип библиотеки также будет работать:

  • Библиотека пользовательских элементов управления WPF

, предназначенный для хранения элементов управления других типов, кроме объектов UserControl, но являющийся типом подпроекта WPF, контекстные меню также работают правильно для описываемого вами варианта использования.

Edit:

Для полноты я только что проверил, как вручную добавить подпроект GUIDS. Добавьте эту строку к первому PropertyGroup в файле .csproj:

  <PropertyGroup>
    ...
    <ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
  </PropertyGroup>

Не тестировался с Visual Studio Express.

...