GUI do Windows: WPF ou WinRT (2015+)

94

Estou tentando obter uma visão geral das diferentes tecnologias, para usar ao construir GUIs no Windows World.

Para contextualizar, estou construindo um pequeno jogo multiplayer de plataforma 2D. (Apenas para fins de aprendizagem ..)

Meu professor diz que acha que WPF é o caminho certo a seguir, mas parece que ele só compara com o Windows Forms.

Meu entendimento é que aqui em 2015, o Windows Forms está totalmente morto?

Nessa outra questão de stackover, eles dizem que WinRT + XAML é para a construção da GUI Metro (coisa de blocos do Windows 8!), E parece que WPF é algo usado apenas para desktop no Windows 7/8 e está intimamente relacionado ao Silverlight.

Como o Windows 8 Runtime (aplicativos WinRT / Windows Store / Windows 10 Universal App) se compara ao Silverlight e WPF?

  • A área de trabalho é onde os aplicativos antigos vivem (vermelho. WFP).
  • A nova classe de aplicativos, os aplicativos Metro, pode ser construída de várias maneiras, incluindo por VB.NET, C # ou C ++. Essas três opções de idioma podem usar XAML para construir a interface do usuário. A alternativa é usar JavaScript / HTML5 / CSS para o desenvolvimento da IU e do código do aplicativo.

Minha verdadeira pergunta é: Não existe UMA boa maneira de construir GUIs no Window World?

E se não, quais tecnologias devem ser usadas no Windows 7, no Windows 8 (Desktop e Metro), no Windows Phone (e no Windows 10!) E até mesmo no x-box ..

É a tecnologias diferentes que podem ser comparadas dessa forma?

Em que você acha que é a coisa certa para investir tempo?

Alf Nielsen
fonte
5
"WPF ou WinRT?". Aprenda ambos, WPF para desktop e Windows Runtime para dispositivos móveis. Essas tecnologias têm muitas coisas em comum, como XAML e uma estrutura muito semelhante. Você pode até escrever código que suporte ambas as plataformas, como bibliotecas de classes portáteis.
Clemens
2
@Clemens A última parte é um pouco enganadora. Bibliotecas .NET padrão precisam ser reconstruídas / direcionadas para funcionar com aplicativos WinRT, o que pode exigir alterações de código para certas classes.
BradleyDotNET
3
O Windows Forms não está totalmente morto, mas você provavelmente não vai querer usá-lo, a menos que já esteja familiarizado com ele.
Casey de
2
Seu objetivo de "ficar atualizado com a GUI do Windows" é bastante prejudicial na minha opinião. Há pouco futuro nisso para o desenvolvedor médio a longo prazo. A MS mudou suas ferramentas para GUI tantas vezes enquanto JavaScript e HTML5 continuavam ganhando terreno. Se você está desenvolvendo para viver, esqueça tudo o mais. Poucas exceções a isso, se você estiver trabalhando para um fornecedor de terceiros da MS ou GUI ou se estiver disposto a manter o código antigo.
NoChance de
3
Mesmo o MFC não está totalmente morto, e nem o Win32. Mas MFC para jogos é o que um louco escolheria
Lothar

Respostas:

132

Há muito aqui, mas aqui vai:

  • O Windows Forms (Winforms) está morto ? Não. Ainda é ativamente apoiado. Dito isso, é uma tecnologia horrível de se trabalhar (pelo menos uma vez que você conheça a magia do WPF)
  • Se você deseja construir um aplicativo de desktop bonito e bem projetado (clássico, não Metro), o WPF é a resposta em termos puramente .NET. Você pode usar APIs WinRT (como suas classes de soquete), mas não pode executá-los em sistemas operacionais anteriores ao Windows 8. A IU ainda é WPF.
  • Os aplicativos WinRT são para a Windows 8 Store (também estão disponíveis na Windows 10 Store). Você não pode usar WPF aqui, ou WinRT na área de trabalho, então onde você implanta determina o que você usa. Você está correto em sua compreensão dos idiomas / tecnologias disponíveis.
  • O Windows Phone 8 (agora obsoleto) usa um tempo de execução modificado do WinRT (isso mudou no Windows 10). Para Win8 / WP8, você pode usar aplicativos "Universais" para compartilhar a maior parte do código entre um aplicativo WinRT padrão e um aplicativo do Windows Phone.
  • O Windows 10 usa a Plataforma Universal do Windows (UWP), que é baseada no .NET Core. O código desenvolvido para o Windows 10 também pode ser usado no Xbox One, Windows Phone 10 e HoloLens. WPF ainda é para aplicativos de desktop "padrão".
  • XBox é complicado. O XNA foi embora, e a Microsoft parece estar se afastando do conteúdo criado pela comunidade para a plataforma. Dito isso, o Unity3D pode ser implantado no XBox e acredito que o desenvolvimento padrão do DirectX (C ++) funcione para ele. Os aplicativos da Plataforma Universal do Windows também podem ser implantados no Xbox One, e essa parece ser a estratégia da Microsoft no futuro.

Quanto ao que gastar tempo, isso depende do que você está almejando :). Aprender WPF / UWP + XAML trará muitos benefícios se você quiser se manter "atualizado" no desenvolvimento de GUI do .NET, então é isso que eu escolheria. O WPF tem a maioria dos recursos, portanto, começando por aí, você só precisa encontrar soluções alternativas para o que está faltando no UWP (ou em qualquer outra tecnologia baseada em XAML).

Se você fizer isso, certifique-se de aprender o padrão MVVM (Model-View-View Model). Ele funciona muito bem com as tecnologias baseadas em XAML e permite que você compartilhe muita lógica entre seus aplicativos WPF e UWP. A mesma lógica também pode ser usada se você eventualmente desenvolver aplicativos Xamarin para iOS / Android, etc.

Observe que, para o verdadeiro desenvolvimento de jogos, você vai querer uma estrutura de jogo real (como Unity3D ou até mesmo XNA). Você pode fazer isso no WPF, e é uma escolha melhor do que o WinForms, mas nenhum deles é realmente feito para jogos.

BradleyDotNET
fonte
Obrigado pela resposta, meu minijogo começou com XNA, então lamento saber que eles irão removê-lo. Mas estou ansioso para ver o que o Windows 10 nos trará.
Alf Nielsen
@AlfNielsen Não tenho certeza de quando é o fim do suporte, mas certamente parece que eles não irão atualizá-lo tão cedo.
BradleyDotNET
2
Parece que o VS vai oferecer suporte total ao Unity, então parabéns por ter previsto isso! :)
BK
2
A velocidade de renderização do WPF usando classes WPF como Visual é horrível para jogos ou qualquer coisa em tempo real.
Winger Sendon
2
@WingerSendon Veja RenderTransform, Viewport3De assim por diante . Eles são acelerados por hardware.
BradleyDotNET
26

É um tópico bastante antigo, mas como descobri no google (sem interesse), talvez outra pessoa também possa entrar em contato aqui. Esta é uma pergunta que é feita repetidamente por novos programadores. Portanto, gostaria de responder algumas coisas também, agora que o Windows 10 foi lançado oficialmente.

Em primeiro lugar, não se deve mais começar com o Windows Forms. É a tecnologia mais madura por enquanto, mas não haverá mais nenhum desenvolvimento do Windows Forms, está apenas em fase de manutenção agora. WPF é desenvolvido ativamente (última leitura). Mas agora, os Aplicativos Universais do Windows (WinRT) não precisam mais ser usados ​​em tela inteira e podem ser usados ​​em modo de janela como outros aplicativos de desktop (WPF e WinForms). Isso aumenta muito sua usabilidade em computadores que não sejam tablets. Acredito que esse também será o futuro dos aplicativos de desktop. Embora os softwares WPF sejam os aplicativos de desktop tradicionais (sem nenhuma coisa de permissões, apenas UAC). De qualquer maneira, não importa se você aprenda desenvolvimento WPF ou WinRT (usando .Net), você acabará aprendendo os dois. Ambos são XAML + C # (ou alguma outra linguagem .Net). Eu estava aprendendo WPF quando o WinRT foi lançado com o Windows 8. Eu me senti em casa, apenas algumas pequenas mudanças às quais você se acostuma logo. Não tenho certeza sobre o cenário MVVM (vinculação de dados) no WinRT embora. Ainda estou aprendendo esse aspecto do WPF.

A janela 10 acaba de ser lançada. O Windows 8 / 8.1 não teve tanto sucesso quanto o Windows 7. Portanto, se você deseja criar um aplicativo que tenha um público mais amplo, deve usar o WPF por enquanto. Mas em um futuro próximo, o WinRT será o caminho a percorrer.

Para sua pergunta, "quais tecnologias devem ser usadas no Windows 7 , no Windows 8 (Desktop e Metro), no Windows Phone (e no Windows 10!) E até mesmo no x-box.", A única resposta é o Windows Universal Apps. Este é o motivo exato pelo qual esta estrutura foi desenvolvida. Uma tecnologia a ser usada para desenvolver aplicativos para todos os dispositivos. Desktop, Tablet, telefones (incluindo Android usando Xamarin junto com o Visual Studio 2015), Xbox e IoT (Internet das coisas).

Prateek Jain
fonte
19
Os aplicativos universais não parecem funcionar no Windows7 ou Windows8. "Aplicativos universais" são apenas "universais" para dispositivos Win10.
Dragontamer5788
Xamarin ainda é uma coisa própria (sem aplicativos universais) e não tenho certeza se eles podem implantar no Xbox também.
BradleyDotNET
2
@PrateekJain: NÃO na execução de aplicativos UWP no Windows 8: stackoverflow.com/a/30317960/199364
ToolmakerSteve
6
WinForms ainda é ótimo para GUIs rápidas e sujas - WPF é bom, mas requer muito código clichê (e uma curva de aprendizado íngreme) para usar "corretamente", mesmo sem MVVM. É uma pena que o WPF não tenha verdadeiros recursos RAD - e que o XAML seja tão prolixo .
Dia
1
Para todos os dispositivos da minha bunda. É a microsoft speak novamente no que há de melhor. Exatamente como nos velhos tempos, quando o chamavam de plataforma cruzada, porque rodava no Windows 95 e no Windows 2000. A outra coisa é que eu nunca quero que os aplicativos de desktop tenham os mesmos tamanhos horríveis de botões, especialmente árvores e listas que eu tenho que usar para tocar. Portanto, não há UWP para mim
Lothar
23

Vou tentar responder apenas uma de suas perguntas:

O Windows Forms está totalmente morto?

Não, a tecnologia de formulários do Windows não morreu. Dir-te-ei porquê. WPF e XAML são tecnologias muito abrangentes e complexas e você pode construir uma interface de usuário muito boa. Mas! Esta tecnologia requer conhecimento profundo. Para layouts básicos, você não precisa de tanto conhecimento, mas para alguns layouts avançados você deve ter conhecimento profundo e quando comecei com essa tecnologia passei muito tempo procurando algumas dicas no google. Portanto, quando preciso de alguns formulários simples para a entrada do usuário, estou sempre escolhendo a tecnologia do Windows Forms, que é muito simples e direta. Esta é também a razão pela qual esta tecnologia teve muito sucesso quando veio ao mundo. Quando você inicia o WPF, também precisa saber o que é o padrão de design MVVM e alguns programadores não experientes ficam confusos com isso.

Tomáš Opis
fonte
3
Esta é minha resposta favorita. Para aplicativos pequenos, eu uso o Windows Forms porque é muito rápido e fácil de usar. Para código de produção complexo, eu uso C ++ (com WTL) e o side-step .NET inteiramente.
Robinson
8
Para leitores não familiarizados com o WPF, alguns esclarecimentos - para layouts de aplicativos básicos, o WPF requer mais ou menos a mesma quantidade de esforço. O modelo de aplicativo VS WPF padrão fornece o mesmo ponto de partida que WinForms. MVVM não é obrigatório para trabalhar com WPF, mas usar Binding sem qualquer estrutura MVVM também é fácil para aplicativos simples. O WPF está tecnologicamente mais próximo do WinRT e do UWP, portanto, para seu próprio bem, suponha que o Windows Forms está morto para qualquer outra coisa além de manter aplicativos legados.
também
3
Winforms é ótimo para construir um aplicativo de "console" da nova era. Por exemplo, controle de guia extremamente básico com um monte de botões e entradas do usuário que efetivamente colocam uma capa no que normalmente seria um aplicativo de console.
rola em
16

Estamos em abril de 2016 e ainda não há uma resposta clara para isso. Estamos desenvolvendo um aplicativo de desktop de monitoramento de desempenho em tempo real muito moderno que deve renderizar vários gráficos e exibições, misturados com texto e vários outros gráficos. Nosso aplicativo é C #, WPF com .NET Framework 4.5.2, mas ainda estamos escrevendo alguns componentes usando WinForms e GDI + para obter um desempenho aceitável. Simplesmente não conseguimos isso com o WPF. Até desenvolvemos alguns monitores no aplicativo com DirectX, mas isso adiciona muita complexidade que apenas alguns membros da equipe podem suportar. A simplicidade e a velocidade que podemos obter hospedando um display WinForms no WPF e a velocidade do GDI + nos dão o que precisamos com o custo da estrutura View / ViewModel pura e temos que lidar com vários problemas de espaço aéreo. Nosso aplicativo é muito especializado e eu adoraria me livrar dos WinForms por completo, mas infelizmente isso ainda não é possível em nosso caso. Para obter um desempenho puro, você precisará usar DirectX ou WinForms.

Gareth
fonte
1
Vou te dizer que algumas coisas têm melhor desempenho no WinForms. Existem outras coisas (animações em particular) para as quais o inverso é verdadeiro. Concedido, ir direto para o DirectX provavelmente seria ainda melhor, mas ninguém quer fazer isso como você apontou.
BradleyDotNET
1
Depois do WinRT, decidi começar a procurar outro lugar. Meus clientes e eu não podemos confiar muito no que a Microsoft deseja, pois isso afeta meus resultados financeiros e de meus clientes. Agora estou olhando para um aplicativo auto-hospedado que usa um servidor da web local para servir as páginas do aplicativo localmente para o navegador do usuário ou controle de navegador incorporado em um aplicativo WinForm / WPF. Isso simplifica o desenvolvimento, aproxima-me da compatibilidade entre plataformas e, obviamente, reduz os custos.
TheLegendaryCopyCoder
6

Meus dois centavos ... se você quer verdadeiros aplicativos universais, ou seja, programas que podem ser executados em QUALQUER sistema operacional de desktop, incluindo Windows, WinForms ainda é o caminho a percorrer. Apenas certifique-se de manter a compatibilidade CLR e de implantar no Mac e Linux via Mono. Um grande benefício. O XAML pode ser legal, mas não será transferido para outros sistemas operacionais.

Pessoalmente, acho o modelo de negócios UWP em área restrita (areia movediça?) Assustador; ele contraria a abertura que o Windows representa desde o início.

Jeroen S
fonte
4

Trabalho com tecnologias Microsoft há mais de 10 anos. A coisa mais importante que aprendi não é apenas ouvir o que a Microsoft está oferecendo. Quando a Microsoft está dizendo que este é o futuro, ela tem 50% de chance de dar errado. A Microsoft com certeza fará o melhor que puder para promover os produtos nos quais investiu, mas isso não significa que você deva seguir. Veja o que acontece com o WCF e o Silverlight.

Embora o WPF seja uma plataforma muito boa de se aprender, ele tem uma enorme curva de aprendizado. Eu não acho que nenhum desenvolvedor com menos de 5 anos de experiência em programação pode fazer WPF direito.

Seguindo o padrão MVVM, você descobrirá que fazer algo relativamente fácil no WinForm pode se tornar muito desafiador no WPF. Como colorir uma célula com base em alguma condição após uma atualização, ou role uma linha na visualização e realce-a.

Claro que você pode dizer que não precisa fazer MVVM. Basta colocar seu código no código e fazê-lo funcionar. Sim, isso vai funcionar, mas qual é o sentido de usar o WPF? Por que não usar o Win Form?

Jason Ching
fonte
1
Concordo que o WPF tem uma curva de aprendizado intensa, mas depois que você superar isso, simplesmente não haverá como voltar ao WinForms ... nunca.
Krythic 01 de
4

Este é um tópico antigo, mas importante com o progresso atual da estrutura .NET, recursos do c # e maior foco no c # como uma opção de desenvolvimento de jogos.

WPF quase nunca é escolhido como plataforma de jogo c # com toda a honestidade. Os problemas de espaço aéreo da WPF assustaram as pessoas muito rapidamente. Eu não acho que muitos (se houver) títulos principais ou motores de jogo de fluxo principal suportem WPF como uma plataforma de destino devido a isso. O WPF é uma ótima plataforma para lançadores de jogos!

WinForms, embora agora em modo de manutenção, ainda será uma escolha válida nos próximos anos. É testado pelo tempo e estável. Pelo que tenho visto, mesmo em 2017, WinForms ainda é a plataforma mais comum escolhida para o desenvolvimento de jogos baseados em c #.

Olhando os dados do Steam Hardware Survey, você pode ver que, no momento em que escrevia esta resposta (julho de 2017), o Windows 10 de 64 bits agora é a plataforma de jogos para PC dominante com 50% do mercado, seguido pelo Windows 7 de 64 bits com 32% e Windows 8.1 64 bits em quase 7%. A participação de mercado de todas as outras plataformas de sistema operacional é tão pequena que mal vale a pena considerar qualquer coisa além dessas três.

Sendo esse o estado atual dos jogos de PC, WinForms é o denominador mais comum para atingir as 3 principais plataformas de PC. Olhando para o futuro, a UWP será a melhor plataforma de destino para o desenvolvimento de jogos c #, já que o Windows 7 e 8 perdem participação de mercado significativa para o Windows 10, a menos que apareça uma nova plataforma que a substitua. Então isso é apenas pelos números.

Se escolher com base no melhor nível de compatibilidade por plataforma de sistema operacional em vez de oferecer suporte à participação máxima de mercado, as opções seriam mais como:

  • Windows 10: UWP
  • Windows 8.1: WinRT ou Windows Store
  • Windows 7: WinForms

A maioria das outras respostas gira em torno do desenvolvimento de aplicativos Windows padrão, mas o desenvolvimento de jogos é um domínio muito diferente e diferentes fatores influenciarão suas escolhas, como o sistema operacional de destino e qual a sua escolha de API gráfica ou mecanismo de jogo realmente suporta melhor.

Mike Johnson
fonte
Embora ter um ponto de vista sobre gamedev seja interessante, não entendo por que você escolheria uma estrutura de GUI para gamedev onde você tem um mecanismo de jogo completo para C # como o Unity. Apenas alguns jogos que vi com GUI clássico eram para edição de dados do jogo (como edição de mapa / ativos)
Uwy
2
Pelo mesmo motivo, eles escolheram um mecanismo de jogo: é um pouco trabalhoso criar e gerenciar uma janela nativa com eficiência a partir de código gerenciado por conta própria.
Mike Johnson
3

O WinRT está na área de trabalho há muito tempo, estou escrevendo o WinRT, que roda na minha área de trabalho. E no Windows 10, esses aplicativos suportarão locais não encaixados (em janelas, como você os conhece tradicionalmente).

Eu não recomendaria WinForms ou WPF para ninguém começando hoje. Eles devem aprender WinRT / XAML principalmente. E aprenda um pouco de Win32 / .net conforme necessário, dependendo do idioma de sua escolha.

"eles dizem que WinRT + XAML é para a construção de Metro GUI (coisa de blocos do Windows 8!)" - Isso é uma abstração tão excessiva que é inútil. WinRT é um runtime, como Win32, não é apenas para GUI, então o que "eles dizem" é um BS completo. XAML é uma camada de interface do usuário (muito parecida com XAML no WPF), mas dizer que seu Metro GUI também está errado, não existe mais Metro GUI. XAML é a camada de interface do usuário do Windows. E "coisa de ladrilhos do Windows 8!" é expressivo da visão de túnel de certas pessoas. Seria como se eu dissesse que o Win32 é uma coisa do menu Iniciar. Você pode ver como essa afirmação é ridícula.

Gavin Williams
fonte
8
Para esclarecer minha declaração original, o WinRT não pode ser usado para criar um aplicativo de desktop "tradicional". Por esse motivo, entre outros, existem toneladas de razões para aprender WPF (WinForms, não tanto). Se nada mais, você terá efetivamente aprendido WinRT ao mesmo tempo (como observei em minha resposta). Além disso, não estamos nem perto do ponto em que os aplicativos WinRT dominam o mercado (especialmente os aplicativos de linha de negócios). WPF ainda é extremamente valioso.
BradleyDotNET,
7
Se o WinRT não estiver vinculado à construção de aplicativos de tela inteira, você poderia me dizer como pode usá-lo para construir um aplicativo em janelas que seja executado em qualquer versão realmente lançada do Windows? Ou como usá-lo para escrever um aplicativo que rode em mais de 10% dos computadores Windows (ou seja, Windows 7 e XP)? Acho que a maioria dos desenvolvedores deseja atingir mais de 10% dos usuários do Windows. Até que o Windows 8 ou 10 consiga uma grande fatia do mercado, o WPF ainda será necessário para muitos aplicativos. O WinRT pode ser uma camada de tempo de execução, mas isso não muda o fato de que ele não pode acessar muitas das coisas que o Win32 (completo) pode.
John Colanduoni
1
@JohnColanduoni como ele disse, para quem começa hoje (Mar14) WinRT é o caminho a percorrer, win10 foi e é gratuito como uma atualização por alguns meses agora, e será por mais alguns meses, então sim, win10 está ganhando um grande participação de mercado. sim, nem todos mudaram para win10, mas também alguns dias atrás descobrimos que um aeroporto na França ainda usa win3.1
John Demetriou
3
@GavinWilliams Ok, onde estão suas estatísticas que colocam o Windows 10 em uma fatia de mercado apreciável em qualquer segmento de mercado? Você está dizendo que os mods removeram seu comentário com um link para sua fonte, mas eles deixaram você colocar este? Eu não estou acreditando nisso. Concordo que não vale a pena dar suporte ao XP, mas os aplicativos universais do Windows 10 nem mesmo oferecem suporte ao Windows 8.1, muito menos ao Windows 7. A adoção não é necessária para justificar o Windows universal, e está diminuindo .
John Colanduoni
3
@GavinWilliams Ok, vamos ignorar que 30% é muito menos que 97% (o suporte que você obteria se usasse WPF) e que esses dados são úteis apenas para programadores de videogame. Para videogames, é muito fácil atingir os dois; a menos que você esteja fazendo algo realmente trivial, você vai querer usar DirectX / OpenGL, o que significa que você só precisa hospedá-lo em uma janela / tela inteira. Se você não quiser usá-los, você realmente vai querer WPF, já que a IU do WinRT não permite o desenho em modo imediato sem DirectX / OpenGL hospedado (como o WPF faz). Então, o que acontece com o WinRT justifica uma redução de 70% no tamanho do mercado?
John Colanduoni
1

Eu me deparei com essa questão há um ano. Eu cheguei à conclusão de que se XAML, WPF ou WinRT são o ambiente de desenvolvimento correto para começar.

Eu altamente recomendo usando .Net Framework para camada de dados (incluindo Web Services e camada RESTful (JSON)) e HTML5 / CSS3 puro e Javascript para sua camada de apresentação web.

No Windows 10, você pode integrar qualquer aplicativo da web como um aplicativo metro pronto para uso.

WinRT, XAML, WPF e outras coisas semelhantes funcionam apenas no Windows e têm muitas limitações.

Então, depois de um ano, ainda estou muito feliz com minha decisão de não usar WinRT ou XAML para meu novo projeto.

Khamis
fonte
3
Do que você está falando? Sim, é uma ótima escolha se você deseja fazer um aplicativo da web. Se você quiser fazer um aplicativo para desktop, não é. Você poderia usar o Katana e ter o WebApi hospedado localmente e fazer um aplicativo para desktop, o que eu acho que tornaria esta resposta mais relevante.
Casey
1
OP perguntou sobre Windows GUI e WPF ou Winrt - não aplicativos da web.
ezaspi
6
Além disso, pessoalmente acho essas tecnologias muito mais difíceis de trabalhar (sistema de layout incompreensível, sem verificações de tempo de compilação no código, etc.) O desktop ainda não está morto :)
BradleyDotNET
1
Eu concordo, HTML é a IU universal e deve ser para a área de trabalho também. Sinto que precisamos simplificar todas essas estruturas diferentes e parar de introduzir mais e mais e mais e mais. A maior parte não é necessária. Basta aprender HTML e ASP e, em seguida, hospedar seu site em um aplicativo WinForm. O aplicativo WinForm contém seu servidor e controle do navegador da web. O resultado é que você economiza tempo, se concentra em dominar uma linguagem e tecnologia, desenvolve mais rápido, economiza dinheiro para seus clientes, seus aplicativos são à prova de futuro e muito mais portáteis.
TheLegendaryCopyCoder