Вопрос

У меня есть побочный проект, который я написал несколько лет назад в WinForms.Чтобы лучше помочь мне изучить WPF, я хотел бы переписать его в WPF.В идеале я хотел бы просто изменить текущий проект, который у меня есть, и переписать пользовательский интерфейс в WPF вместо создания нового проекта.

У меня возникают некоторые проблемы с этим.Я сделал следующее (используя Visual Studio 2008 с пакетом обновления 1):

  1. Изменен целевой фреймворк с 2.0 на 3.5.
  2. Добавлены ссылки на PresentationCore, PresentationFramework и WindowsBase.

В этот момент я заметил, что что-то не так.Когда я щелкнул правой кнопкой мыши по проекту и выбрал Добавить | Новый элемент, у меня не было возможности создать окно WPF - единственный класс WPF, который я мог создать, - это пользовательский элемент управления WPF.Поскольку у меня было несколько других проектов WPF, я скопировал App.xaml.* и Window1.xaml.* из этого проекта в свой и обновил их по мере необходимости (в основном просто изменив пространство имен этого проекта на пространство имен моего проекта).

Затем я удалил Program.cs (который ранее содержал основной метод, который отображал основную форму WinForm) и построил проект.Я получил сообщение об ошибке, указывающее на отсутствие основного метода.

Похоже, что внутренне Visual Studio знает, что этот проект на самом деле является приложением WinForms, а не приложением WPF.В проекте WPF (созданном путем выбора "Приложение WPF") в свойствах приложения я могу установить экземпляр класса Application в качестве начального объекта.В моем проекте, преобразованном в WinForms, это не вариант.

Я быстро просмотрел файл .csproj в текстовом редакторе, но не смог найти ничего, что говорило бы Visual Studio о том, что проект действительно WinForms, а не WPF.

Что еще мне нужно сделать, чтобы превратить мой проект WinForms в "настоящий" проект WPF?Есть ли у меня другой вариант, кроме создания нового проекта и простой замены моего текущего проекта?

Обновить: Я более внимательно изучил файлы .csproj и заметил, что App.xaml был добавлен как страница:

<Page Include="App.xaml">
  <Generator>MSBuild:Compile</Generator>
  <SubType>Designer</SubType>
</Page>

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

Это было полезно?

Решение

Я не знаю наверняка , что в файле проекта сообщает Visual Studio, какой тип проекта используется, но я предполагаю, что " ProjectTypeGuids " это ключ.

Мои проекты WPF имеют это:

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

Вот ссылка , которую я нашел, которая описывает руководства и какие проект, который они представляют. Вы заметите, что guid начинается с & Quot; 60DC & Quot; соответствует списку в ссылке для приложений WPF.

Другие советы

Ответ Sailing Judo помог мне преобразовать проект WinForms в WPF, но не описал подробно, что необходимо;

  1. Откройте csproj файл для проекта, который вы хотите преобразовать.
  2. Выполните поиск строки <ProjectTypeGuids> - скорее всего, его вообще не будет.
  3. Добавьте следующее в тег файла проекта.Если у вас есть несколько PropertyGroup теги, используйте тот, который без Condition атрибут (например,свойства по умолчанию).

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

  4. Сохранить - если у вас открыт проект, VS попросит перезагрузить проект.

Судя по тому, что я вижу и тестирую, теперь я могу легко добавлять окна WPF и WinForms.Мои старые WinForms также работают без проблем.

К сожалению, нет.

Проекты WPF и Windows Forms не очень совместимы.

  • Постарайтесь извлечь как можно больше суетливости логический код в библиотеку классов
  • Создайте новое пустое решение
  • Добавьте новый проект WPF в решение
  • Добавить проект библиотеки классов в решение
  • Установите библиотеку классов в качестве зависимости от проекта WPF
  • Воссоздайте Windows в WPF заново

Надеюсь, это сработает у вас.

Желаю удачи в этом начинании!

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top