Pergunta

Eu tenho um projeto paralelo que eu escrevi há alguns anos atrás em WinForms. Para melhor ajudar-me a aprender WPF, eu gostaria de reescrevê-lo em WPF. Idealmente, eu gostaria de simplesmente modificar o projeto atual que eu tenho e reescrever a interface do usuário no WPF em vez de criar um novo projeto.

Eu estou tendo alguns problemas ao fazer isso. Eu fiz o seguinte (usando o Visual Studio 2008 SP1):

  1. Mudou o quadro alvo entre 2,0 e 3,5.
  2. referências
  3. Adicionado PresentationCore, PresentationFramework e WindowsBase.

Neste ponto, notei que algo estava errado. Quando eu cliquei direito do projeto e selecionado Add | New Item, eu não tenho uma opção para criar uma janela WPF - a única classe WPF que eu poderia criar um WPF User Control. Desde que eu tinha alguns outros projetos WPF ao redor, eu copiei App.xaml. * E Window1.xaml. * Desse projeto ao meu, e atualizado-los quando necessário (basicamente apenas mudando o namespace desse projeto para o namespace do meu projeto).

Eu, então, eliminado Program.cs (que continha anteriormente o método principal, que exibia o principal WinForm Form), e construiu o projeto. Eu tenho um erro indicando que não existe um método principal.

Parece que internamente Visual Studio sabe que este projeto é realmente um aplicativo WinForms, e não um aplicativo WPF. Num projecto WPF (criado seleccionando "Aplicação WPF"), nas propriedades de aplicação que pode definir o exemplo da classe de aplicações como um objecto de arranque. Em meus WinForms convertido projeto, que não é uma opção.

Eu levei um rápido olhar para o arquivo csproj num editor de texto, mas não consegui encontrar nada que possa dizer Visual Studio que o projeto é realmente WinForms em vez de WPF.

O que mais eu preciso fazer para transformar meus WinForms projetar em um projeto "real" WPF? Eu tenho uma opção diferente de criar um novo projeto e apenas substituindo o meu projeto atual?

Update: eu dei uma olhada mais de perto os arquivos csproj, e notei que App.xaml foi adicionado como uma página:

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

No entanto, no meu outro projeto WPF, é uma ApplicationDefinition. Depois que eu mudei isso, eu poderia definir o meu exemplo de aplicação como o start up objeto, e meu aplicativo seria executado. Eu ainda não tenho uma opção para criar quaisquer outros do que controles de usuário tipos WPF, no entanto.

Foi útil?

Solução

Eu não sei para certeza o que nos informa arquivo de projeto do Visual Studio que tipo de projeto está sendo usado, mas meu palpite é que os "ProjectTypeGuids" é fundamental.

projectos Meu WPF tenho este:

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

Aqui está um link eu achei que descreve os guids e que tipo de projeto que eles representam. Você notará que a partida guid com "60DC" corresponde a lista na ligação para aplicações WPF.

Outras dicas

A resposta de Sailing Judo trabalhou para me converter um WinForms projetar em um WPF, mas não descreveu em detalhes o que é necessário;

  1. Abra o arquivo csproj para o projeto que você deseja converter.
  2. Procure o <ProjectTypeGuids> string -. Mais likly não existirá
  3. Adicione a seguinte dentro da tag do arquivo de projeto. Se você tem várias tags PropertyGroup, use o um sem um atributo Condition (por exemplo, as propriedades padrão).

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

  4. Save -. Se você tiver o projeto aberto VS irá pedir para recarregar o projeto

Pelo que vejo e teste, agora eu posso facilmente adicionar WPF do Windows e WinForms. Meus WinForms mais velhos também funcionam sem problemas.

Infelizmente não.

WPF e Windows projectos formas não são muito compatíveis.

  • Tente extrair o máximo de pieguice código de lógica em uma biblioteca de classes
  • Criar uma nova solução em branco
  • Adicionar um novo projeto WPF à solução
  • Adicione o projeto de biblioteca de classe para o solução
  • Definir a biblioteca de classes como uma dependência o projeto WPF
  • Recriar as janelas WPF

Espero que isso funciona para você.

Boa sorte com este esforço!

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top