Подтвердить что ты не робот

Обновление приложения WinForms в WPF

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

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

  • Изменена целевая платформа с 2.0 до 3.5.
  • Добавлены ссылки PresentationCore, PresentationFramework и WindowsBase.

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

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

Кажется, что внутренне Visual Studio знает, что этот проект действительно является приложением WinForms, а не WPF-приложением. В проекте WPF (созданном при выборе "WPF Application" ) в свойствах приложения я могу установить экземпляр класса 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, кроме пользовательских элементов управления.

4b9b3361

Ответ 1

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

Мои проекты WPF имеют следующее:

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

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

Ответ 2

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

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

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

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

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

Ответ 3

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

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

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

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

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