Transição de Formulários do Windows para WPF

113

Por um longo tempo, estive preso no desenvolvimento de Windows Forms (começou com VB6 e continuou até C # .NET 4.5), e quase atingi o limite do que o Windows Forms pode fazer, ambos usando .NET puro e efeitos especiais com Native Code.

Tentei aprender WPF e XAML, mas não consigo entender o novo designer do WPF. Realmente parece muito difícil de usar em comparação com o designer do Windows Forms.

Eu quero saber se há alguma alternativa para o designer WPF do .NET, que seja mais adequada para desenvolvedores de formulários do Windows?

Matthew Layton
fonte
7
Normalmente nem mesmo uso o designer, exceto para verificar se o layout geral é o que eu esperava; no final, escrevo tudo à mão em XAML e / ou uso o Blend quando necessário - embora não seja um designer, isso quase nunca acontece.
Patryk Ćwiek
Você pode usar o Expression blend, mas não acho que seja mais fácil, é mais para designers do que para desenvolvedores IMO. Eu normalmente desligo a visualização e trabalho com o xml.
BlackICE
5
Não é difícil de usar, você simplesmente não está acostumado com isso. O maior obstáculo a superar é a mudança de paradigma entre as duas tecnologias. Arranja um bom livro sobre XAML. Depois de se acostumar com o XAML, você nem usará mais o designer - digitará XAML diretamente.
slugster
3
@slugster, eu me pergunto sobre isso. A mesma coisa aconteceu com HTML ... Eu costumava construir a IU com o dreamweaver, e agora codifico HTML manualmente
Matthew Layton

Respostas:

175

Gosto de fazer um blog sobre artigos para iniciantes do WPF, e há alguns em particular que podem ajudá-lo:

Para resumir, a maior diferença entre Winforms e WPF é que no WPF sua camada de dados (o DataContext ) é seu aplicativo, enquanto no Winforms sua camada de IU é seu aplicativo.

Olhando de outra forma, com o WPF, seu aplicativo consiste nos objetos que você cria e você usa modelos e outros objetos de IU para informar ao WPF como desenhar os componentes de seu aplicativo.

Isso é o oposto de WinForms, onde você constrói seu aplicativo a partir de objetos de IU e, em seguida, fornece a eles os dados necessários.

Por causa disso, o designer não é realmente muito usado, já que os componentes de seu aplicativo são projetados em código, e o designer só é necessário para desenhar uma interface amigável que reflita suas classes de dados (normalmente Models e ViewModels)

E, pessoalmente, prefiro digitar todo o meu XAML à mão, pois é mais rápido e não faz tanta bagunça quanto o designer WPF de arrastar / soltar, embora eu use o Designer ocasionalmente para visualizar a aparência da minha IU gostar.

Então, para sua resposta à sua pergunta sobre se há outros designers de WPF adequados para desenvolvedores de WinForms, eu sugeriria que, em vez de procurar outro designer, procure aprender como usar o WPF da maneira como deve ser usado. Usar o WPF como se fosse WinForms significa que você perderá muito do que o torna tão bom :)

Rachel
fonte
14
Concordo totalmente com @Rachel. A realização mais importante quando vem à luz do WPF é entender que a interface do usuário não é dados e agir de acordo.
Federico Berasategui
2
@Rachel - apenas para bancar o advogado do diabo: Começar com a IU (quais botões, caixas de texto etc. aparecem na janela) ajuda a focar o aplicativo no que você deseja fazer. O resto são apenas detalhes de implementação de como você deseja fazer.
Asaf
3
@HighCore dê uma olhada em stackoverflow.com/questions/982978/mvvm-for-winforms e você terá que reconhecer que Winforms é apenas um componente View / UI no qual os objetos de negócios podem ser vinculados aos controles do usuário. Ok: WPF é mais adequado para MVVM, mas, no entanto, Winforms também pode funcionar em tal Design Pattern. E como Rachel afirma, "Isso é o oposto de WinForms, onde você constrói seu aplicativo a partir de objetos de IU e, em seguida, fornece a eles os dados necessários." É tão falso por enquanto. Eu sempre penso em pelo menos Data and View. Dados e Winforms / WPF / HTML qualquer.
Bernoulli IT
2
Ele suporta ligação de dados, pelo menos no nível de entrada / modificação de dados. E esses 99,9999999% dos desenvolvedores também vão bagunçar no WPF, eu suspeito. Mas vamos terminar esta discussão. WPF é absolutamente mais poderoso / adequado para MVVM e uma separação de interesses, mas acho que você e também Rachel empurram Winforms em um canto negativo. Especialmente quando você continua usando as palavras que usa ...
Bernoulli IT
3
@YoupTube Você está certo, o Winforms tem suporte para vinculação de dados e é possível criar suas próprias vinculações personalizadas para casos em que o sistema de vinculação padrão também não funcione. No entanto, escrevi esta resposta e meus artigos de blog com os iniciantes em mente, e normalmente os iniciantes pensam em termos de componentes de IU, não de objetos de dados. Além disso, a vinculação em WinForms nem sempre existia no estado em que está agora, portanto, muitos desenvolvedores que cresceram com WinForms, ou que estão acostumados com outras tecnologias que não usam vinculações, geralmente não identificarão essa diferença fundamental ao alternar a uma arquitetura limitada. :)
Rachel
9

Bem, embora algumas pessoas não concordem, eu também recomendaria não usar o designer VS. Pelo menos não para criar uma interface. Se você quiser ter uma primeira impressão de sua implementação sem iniciar o aplicativo, é um bom visualizador, pelo menos, desde que nada sofisticado como Stylese Templatesseja usado. Mas, IMHO, seu resultado de arrastar e soltar deve ser usado apenas como protótipo e, portanto, ser descartado quando não for mais necessário.

Aqui estão algumas razões que são importantes para eu não usá-lo.

  1. O designer do VS está trabalhando com margens e alinhamentos fixos (o que geralmente não é necessário, se você estiver usando os controles de layout), o que significa que você terá que tocar em muitos controles, se os requisitos forem alterados. Se você estiver profundamente interessado em XAML e na mecânica do WPF, poderá criar aplicativos que podem ser modificados com pouco esforço, em relação à aparência.

  2. Como o designer está gerando o xaml, a composição não é ideal e a IU pode funcionar mal. Eu não medi, é apenas um sentimento.

Uma alternativa muito melhor é o MS Blend , embora o início seja tudo menos fácil. Seu resultado de arrastar e soltar é muito melhor que o resultado do designer VS.
Mas é uma ferramenta muito poderosa, que o ajuda a usar elementos muito poderosos para criar uma interface de usuário de última geração. Recomendo visitar pelo menos um pequeno workshop para ter uma ideia de suas oportunidades.

Voltando à sua pergunta, IMHO, e eu acho que muitas pessoas concordam, compre um bom livro, por exemplo, WPF Unleashed e mais tarde, se você quiser saber mais sobre os detalhes, WPF Pro . Existem muitos recursos que são diferentes de Winforms. Você não vai conhecê-los usando nenhum designer. Acho que é a melhor abordagem.

Considere também que existem muitos frameworks e bibliotecas (por exemplo, MVVM light , WPFToolkit ) por aí, que já estão resolvendo alguns problemas comuns. Portanto, não é necessário reinventar a roda.

DHN
fonte
9

Eu sei que esta é uma pergunta antiga, mas para o benefício de qualquer pessoa que estiver olhando para isso, acho que devo restabelecer um pouco o equilíbrio - lendo algumas das outras respostas, tenho a sensação de que alguns dos 'não use o designer 'sentimento vem de não usá-lo corretamente. Este tutorial é muito bom para você começar e responder algumas das críticas nos outros posts.

Por exemplo, você pode mudar do layout baseado em margem semelhante ao WinForms, que é o padrão quando você solta um controle, para um estilo mais WPF clicando com o botão direito e selecionando 'Redefinir Layout'

Este vídeo cobre um terreno semelhante.

Eu ainda prefiro o VS2010 designer no equilíbrio - VS2013 parece ser um pouco problemático ao arrastar e soltar em TabItems **, (que meu projeto atual usa muito) - mas a visualização de esboço do documento VS2013 permite que você mova coisas nessa visualização também , o que pode ser uma vantagem real.

Porém, na verdade, para obter o máximo do WPF e do xaml, você precisa ser razoavelmente fluente tanto na visualização do designer quanto na visualização do xaml e alternar entre elas; se você se esquiva do designer, está perdendo algo que pode te ajudar muito.

** Editar - embora isso pareça ter sido melhorado na atualização 3 para o VS 2013, e nas visualizações do VS14, até agora eu ainda tenho um comportamento estranho às vezes.

PeterG
fonte
7

Em primeiro lugar, em WPF (XAML) no deisgner do Visual Studio, você deve sempre usar o código xaml para construir sua IU e não arrastar e soltar seu controle! Você precisa manter seu código limpo. Você pode usar o Expression Blend para ajudá-lo, é mais orientado para gráficos com arrastar e soltar, mas não é gratuito.

Não é uma grande curva de aprendizado, mas acho que você deve aprender como fazer seu xaml manualmente em vez de procurar alternativas.

mlemay
fonte
1
Arrastar e soltar não é prejudicial, embora se você preferir digitar, isso também é bom. A digitação manual nunca é a chave para o WPF.
David
3
Quando você arrasta e solta no WPF, vejo que muitas vezes, você tem uma grande margem de -1200 e coisas assim que não fazem nenhum sentido ... Eu sempre fiz isso manualmente, é melhor com certeza
mlemay
1
Isso está fora do assunto. Certifique-se de que seu problema seja comum a todos, não apenas a você. Além disso, você não pode dizer que arrastar e soltar é ruim, se você tiver alguns problemas. Depender do designer ainda é necessário e às vezes preferido, você verá que isso é verdade, se souber como a expressão é bem-vinda tanto pelo designer quanto pelos desenvolvedores.
David
1
sim, se você usar mistura de expressão, ok, você pode fazer isso, mas eu estava falando no estúdio visual ...
mlemay
12
Acho que aconselhar alguém que vem do Forms e inicia o WPF a não usar o designer é uma péssima ideia. A maneira mais rápida de entender o XAML é arrastar e soltar e, em seguida, observar o código.
Ucodia
7

Passei por esse processo como você. Depois eu estava ensinando WPF a todos na minha empresa. Há algumas lições importantes que aprendi e todos que conheço que trabalham com o WPF.

  1. Se você estiver trabalhando com controles de IU no código por trás, ... Então você está fazendo isso errado. Não há absolutamente nenhuma necessidade de lidar com os controles da IU no código por trás.
  2. Você não precisa do desenvolvedor visual para clicar nele. Você é muito mais produtivo lidando apenas com XAML. Use Copiar / Colar. Não confie em suas capacidades de digitação. Isso vai poupar muitas dores de cabeça.
  3. Pense no XAML apenas como uma janela que fica sobre os dados. No código atrás de você está alterando os dados. No XAML, você está definindo como a interface do usuário interpretará os dados.
  4. Os conversores são incríveis. Assim que você conseguir uma quantidade chave de conversores, sua produtividade vai disparar muito. Eles assumirão o papel da quantidade absurda de manipuladores de eventos de controle que ocultam ou redimensionam, ou o que quer que seja sobre a interface do usuário,

Isso torna o desenvolvimento da IU divertido. Especialmente quando você descobrir como ele gosta de acompanhar os processos Asyc. Realmente tira muitas das dores de cabeça que eram causadas pelo WinForms.

user853710
fonte