Primeiro, observe que esta pergunta não é sobre WPF vs. WinForms.
Quais são os benefícios de mais alto nível que levaram a Microsoft a inventar o XAML em favor da abordagem "antiga" de gerar código C # compilável?
Minha impressão é que outros desenvolvedores parecem encontrar muitas desvantagens, mas a Microsoft foi embora independentemente, o que deve significar que há um benefício que não estou vendo. Gostaria que você me explicasse o que sinto falta.
language-design
xaml
Timwi
fonte
fonte
Respostas:
O maior benefício do XAML é que ele permite descrever sua interface do usuário de maneira declarativa. Ou seja, você não diz tanto "crie uma caixa, redimensione-a agora", mas sim "crie uma caixa e btw, é desse tamanho"
O segundo lugar em que o XAML brilha é que ele realmente tira proveito das ligações. Por exemplo:
No seu modelo de visualização, você pode cuidar dos seus negócios e definir o IsBusy como true ou false e, conforme ele muda, o estado ativado do botão muda automaticamente para frente e para trás.
Então, como um exemplo mais complexo:
Neste exemplo, estamos vinculando a uma lista (Opções) e criando um item em uma caixa de listagem para cada item. O legal aqui é que, à medida que adicionamos itens à lista ou os removemos, a interface do usuário é sincronizada automaticamente com o estado da nossa lista. Quando clicamos na caixa de seleção de cada item, os objetos subjacentes são atualizados automaticamente para corresponder à interface do usuário. Com ferramentas poderosas como essa, cortei as UIs em uma fração do tempo que levaria para conectar todos os eventos em um aplicativo WinForms.
Em geral, tudo isso significa que você pode escrever sua interface do usuário em um formato declarativo e isso é um enorme ganho de produtividade. Embora, devo mencionar que isso tem um custo. Você provavelmente obterá mais desempenho de um aplicativo WinForms, pois o código será menos generalizado. Mas, a menos que você esteja fazendo algo como mostrar 40.000 linhas em uma grade de dados, provavelmente não notará uma grande desaceleração usando XAML.
Também deve ser mencionado que outras bibliotecas de interface do usuário atingem esse mesmo objetivo sem XML. Por exemplo, o QT usa Json (http://labs.qt.nokia.com/2009/05/13/qt-declarative-ui/)
fonte
Os 8 benefícios do XAML para UI e além
Eu vejo o XAML como uma "linguagem intermediária" da interface do usuário; você pode usá-lo com qualquer linguagem de programação e em diferentes plataformas. Permite a descrição independente da linguagem, plataforma e dispositivo da interface do usuário.
fonte
O uso de XML fornece metadados em um formato compatível com um grande número de analisadores e ferramentas de análise. Pelo menos em teoria, isso permite que alguém se meta-programe usando qualquer linguagem.
Mais praticamente, o XML permite que você pareça um padrão mais aberto. Você pode argumentar que é apenas uma marcação como um navegador, mas mais fácil de analisar.
Esses são benefícios reais, mas, na prática, há muita coisa acontecendo fora da XAML para que os benefícios sejam terrivelmente importantes.
fonte
"<While Condition="a == true"><Print>Hi!</Print></While>"
alguém? Isso é obviamente atroz; por que você acha que a representação da interface do usuário é diferente?O XAML foi projetado para simplesmente representar uma hierarquia de objetos e não apenas para a GUI, como XPS e WF. O uso do XAML para criar aplicativos ajudaria você a fornecer RIA (Rich Internet Applications), bem como aplicativos de desktop ricos.
O uso do XAML como uma representação declarativa da GUI baseada em texto aproxima as ferramentas de desenvolvimento do MS de outras tecnologias consideradas padrão no setor, como HTML.
Alguns dos principais recursos do XAML (no Windows Forms) são:
O XAML permite desenhar imagens e transformações de Scalable Vector Graphics (SVG). Um dos benefícios dos gráficos vetoriais é que eles podem ser dimensionados para qualquer tamanho sem perder a qualidade, para que você não se preocupe muito com a resolução do computador do usuário.
Os formulários do Windows, em geral, sofriam de suporte limitado ao posicionamento automático dos controles como resultado do redimensionamento e das alterações na superfície da GUI (como quando novos controles são adicionados ou removidos). Os controles são posicionados por especificação explícita dos valores de linha e coluna para cada controle por meio da GUI ou código do programa. Embora o XAML permita esse comportamento, ele apresenta uma maneira mais fácil de resolver esse problema, fornecendo o controle Stack Control e os controles Wrap Panel.
No XAML, você pode criar novos controles a partir dos existentes diretamente no XAML usando o aninhamento. Você pode aninhar um controle de imagem dentro do controle de botão junto com um Painel de Pilha para criar um novo tipo de botão, ou seja, um botão com uma imagem. Como esse controle é criado no XAML, você não precisa criar uma dll separada para usá-lo como no caso dos formulários do Windows. Exemplo:
O estilo e os modelos permitem personalizar a aparência dos controles em vários níveis semelhantes aos recursos de CSS e HTML. Não é necessária programação processual. Uma mudança pode ser refletida em toda a GUI.
O XAML permite técnicas avançadas de ligação de dados não disponíveis nos formulários do Windows. Você pode até vincular um controle aos valores de dados da antera.
O XAML fornece uma estrutura de Navegação integrada que você pode usar ou substituir por outras estruturas. De fato, o WPF, o Silverlight e o XAML foram projetados para aproveitar o padrão MVVM que você não pode alcançar exatamente com o Windows Forms.
Com a introdução do XAML, o código por trás dos arquivos pode ser isolado em um grau maior dos arquivos de design da interface. Obviamente, a dependência de alguns nomes ainda existe. No entanto, o fato de o XAML ser uma linguagem declarativa baseada em texto semelhante ao XML e HTML que não requer um compilador, permite que os designers de interface criem arquivos XAML separados para serem posteriormente integrados ao código por trás dos arquivos. Isso é diferente do caso dos formulários do Windows em que a GUI é fortemente acoplada como código de procedimento no projeto. Designers que usam XAML podem até sair do Visual Studio e usar a ferramenta MS Expression Blend para criar sua GUI. O MS Expression Blend foi criado para designers, e não para programadores.
O XAML fornece técnicas nativas avançadas para exibição de animação e vídeo sem a necessidade de ferramentas de terceiros.
O objetivo do XAML era tornar o desenvolvimento do software e das páginas da Web baseados no Windows mais próximos do que o ASP.NET e o Windows Forms. O Silverlight e o WPF usam XAML (embora existam algumas diferenças, mas grande parte da experiência é transferível).
Um SDK para XAML inclui controles interessantes e permite, entre outros recursos, oferecer suporte à apresentação no estilo de assistentes / storyboard sem usar uma ferramenta de terceiros.
fonte
Em teoria, todo novo idioma é algo que você precisa aprender. Muitas pessoas preferem falar muitos / vários idiomas - como isso é considerado uma riqueza de idiomas. Isso existe e está relacionado a linguagens naturais, mas não é necessário a linguagens de programação.
Eu, sozinho, tenho programação em várias linguagens, incluindo arquivos em lote, perl, lua, python, c ++ e c #. Eu me lembro de todos eles? Não, posso mudar usando outro idioma, mas isso leva tempo. Apenas escrevendo agora em C #, depois mude para C ++, você pode facilmente misturar: NULL, null, nil ou nullptr, dependendo da linguagem de programação e do "dialeto". (c ++ normal, c ++ gerenciado)
xaml é "dialeto" em xml. É fácil aprender? com base em muitas perguntas em outros fóruns, eu diria que não.
Ele substitui o C #? Não.
A resposta é bastante óbvia - eu preferiria ter uma linguagem de programação bem projetada (C # - por exemplo, reflexão de tipo de dados), com um bom desempenho (como C ++) e com script (script de C #, C ++ / se apega ou até melhor)
Atualmente, C ++ e C # não atendem totalmente às minhas necessidades, mas xaml é um formato de dados ímpar, que eu não consideraria digno de aprendizado (apenas envolvendo e ocultando os olhos do desenvolvedor)
No final, eu gostaria de recombinar a linguagem natural (falada) com a linguagem de programação (linguagem artificialmente construída) na mesma linguagem - para que possa ser usada para comunicação e pelos programadores - isso será mais tarde no futuro, quando a "arquitetura" da linguagem de programação ou "padrões de design" começarão a ser documentados.
O XAML realmente introduz alguns novos recursos aprimorados sobre as formas de win, por isso vale a pena usá-lo. Mas, eventualmente, se você quiser que a interface do usuário se torne totalmente dinâmica - o xaml precisa ser substituído por um código de tempo de execução semelhante.
Eventualmente, a interface do usuário deve ser simples de usar - e isso significa um conjunto mínimo de controles, controles parecidos (cancelar, ok, atalhos, mesma largura / altura e assim por diante), o que significa que a interface do usuário pode ser mais ou menos gerada automaticamente.
Btw - é possível incorporar no código xaml C # diretamente? Meta dados, string, comentários?
Às vezes, é legal abusar ou abusar da linguagem de maneira que ninguém imaginou que ela fosse usada. O Perl faz muito isso, mas eu prefiro uma sintaxe mais limpa do que uma enigmática. Mas C # versus xaml - eu escolheria C #.
fonte
Um benefício é que o XAML pode ser usado em outros aplicativos. Um bom exemplo é que o XAML pode ser desenvolvido no Blend por um designer / artista, enquanto os internos (code behind) são codificados no visual studio.
Acredito que foi a tentativa da Microsoft de marcar a interface do usuário separadamente versus o código por trás e tornar possível que a interface do usuário fosse codificada por não programadores usando uma ferramenta como o Blend.
Mas muitas lojas não têm o Blend, então para muitos de nós parece uma reinvenção da roda.
Aqui estão 8 pontos comprados por alguém mais próximo do cliente Windows:
8 benefícios XAML
fonte
Um ponto que não vejo em muitas respostas é que o xaml envolve o núcleo dos principais wpf desgin. Separe a representação visual e a lógica visual (na prática, isso é limitado a gatilhos e similares, mas assumindo que não há controles personalizados, isso geralmente é tudo o que você precisa) da lógica de negócios. Isso também se encaixa bem como outros observaram com uma sintaxe expressiva para ligação, propriedades anexadas e outros metadados que podem ser mais detalhados no código C # normal.
Em uma nota de opinião mais pessoal, uma coisa que acho interessante no xaml é que o beter representa a hierarquia visual dos controles do que apenas gerar código. À primeira vista, é fácil ver como um controle está relacionado aos outros.
fonte