En primer lugar, tenga en cuenta que esta pregunta no se trata de WPF vs. WinForms.
¿Cuáles son los beneficios de mayor rango que llevaron a Microsoft a inventar XAML a favor del enfoque "antiguo" de generar código C # compilable?
Mi impresión es que otros desarrolladores parecen encontrar muchas desventajas, pero Microsoft lo hizo independientemente, lo que debe significar que hay un beneficio que no estoy viendo. Me gustaría que me explicaras qué es lo que me falta.
language-design
xaml
Timwi
fuente
fuente
Respuestas:
El mayor beneficio de XAML es que le permite describir su IU de manera declarativa. Es decir, no dices tanto "crea una caja, ahora redimensiona", dices "crea una caja y por cierto, es de este tamaño"
El segundo lugar donde brilla XAML es que realmente aprovecha las vinculaciones. Por ejemplo:
En su modelo de vista, puede ocuparse de su negocio y establecer IsBusy en verdadero o falso, y a medida que cambia, el estado habilitado del Botón cambia automáticamente de un lado a otro.
Entonces, como un ejemplo más complejo:
En este ejemplo, estamos vinculando una lista (Opciones) y creando un elemento en un cuadro de lista para cada elemento. Lo bueno aquí es que a medida que agregamos elementos a la lista o los eliminamos, la IU se sincroniza automáticamente con el estado de nuestra lista. Cuando hacemos clic en la casilla de verificación de cada elemento, los objetos subyacentes se actualizan automáticamente para que coincidan con la interfaz de usuario. Con herramientas poderosas como esta, he pirateado las IU en una fracción del tiempo que me llevaría conectar todos los eventos en una aplicación WinForms.
En general, todo esto significa que puede escribir su interfaz de usuario en un formato declarativo y esto es una ganancia masiva de productividad. Aunque, debo mencionar que esto tiene un costo. Probablemente obtendrá más rendimiento de una aplicación WinForms ya que el código será menos generalizado. Pero a menos que esté haciendo algo como mostrar 40,000 filas en una cuadrícula de datos, probablemente no notará una gran desaceleración con XAML.
También se debe mencionar que otras bibliotecas de UI logran este mismo objetivo sin XML. Por ejemplo, QT usa Json (http://labs.qt.nokia.com/2009/05/13/qt-declarative-ui/)
fuente
Los 8 beneficios de XAML para UI y más allá
Veo XAML como un "lenguaje intermedio" de la interfaz de usuario; puedes usarlo con cualquier lenguaje de programación y en diferentes plataformas. Permite la descripción independiente de idioma, plataforma y dispositivo de la interfaz de usuario.
fuente
El uso de XML le proporciona metadatos en un formato que admite una gran cantidad de analizadores y herramientas de análisis. Al menos en teoría, esto le permite a cualquiera realizar un metaprograma en su contra utilizando cualquier lenguaje.
Más prácticamente, XML te permite parecer un estándar más abierto. Puede argumentar que es solo marcado como un navegador, pero más fácil de analizar.
Estos son beneficios reales, pero en la práctica están sucediendo muchas cosas fuera de XAML para que los beneficios sean terriblemente importantes.
fuente
"<While Condition="a == true"><Print>Hi!</Print></While>"
¿nadie? Eso es obviamente atroz; ¿Por qué crees que la representación de la interfaz de usuario es diferente?XAML fue diseñado para representar simplemente una jerarquía de objetos y no solo para GUI como XPS y WF. El uso de XAML para crear aplicaciones lo ayudaría a entregar aplicaciones de Internet enriquecidas (RIA), así como aplicaciones de escritorio enriquecidas.
El uso de XAML como una representación declarativa de GUI basada en texto acerca las herramientas de desarrollo de MS un paso más cerca de otras tecnologías consideradas estándar en la industria, como HTML.
Algunas de las características principales de XAML (sobre Windows Forms) son:
XAML permite dibujar imágenes y transformaciones de gráficos vectoriales escalables (SVG). Uno de los beneficios de los gráficos vectoriales es que pueden escalar a cualquier tamaño sin perder calidad, por lo que no debe preocuparse demasiado por la resolución de la computadora del usuario.
Los formularios de Windows, en general, sufrieron un soporte limitado para la colocación automática de controles como resultado del cambio de tamaño de las ventanas y los cambios en la superficie de la GUI (como cuando se agregan o eliminan nuevos controles). Los controles se posicionan mediante la especificación explícita de los valores de fila y columna para cada control a través de la GUI o el código del programa. Si bien XAML permite este comportamiento, presenta una forma más fácil de resolver este problema al proporcionar el control de control de pila y los controles del panel de ajuste.
En XAML puede construir nuevos controles a partir de los existentes directamente en XAML mediante anidamiento. Puede anidar un control de imagen dentro del control de botón junto con un Panel de pila para crear un nuevo tipo de botón, es decir, un botón con una imagen. Dado que este control se crea en XAML, no necesita crear un dll separado para usarlo como en el caso de los formularios de Windows. Ejemplo:
El estilo y las plantillas le permiten personalizar el aspecto de los controles en varios niveles, de forma similar a las capacidades de CSS y HTML. No se requiere programación de procedimientos. Un cambio puede reflejarse en toda la GUI.
XAML permite técnicas avanzadas de enlace de datos que no están disponibles en los formularios de Windows. Incluso puede vincular un control a los valores de datos de antera.
XAML proporciona un marco de navegación incorporado que puede usar o reemplazar con otros marcos. De hecho, WPF, Silverlight y XAML están diseñados para aprovechar el patrón MVVM que no se puede lograr con Windows Forms.
Con la introducción de XAML, el código detrás de los archivos podría aislarse en mayor grado de los archivos de diseño de la interfaz. Por supuesto, todavía existe la dependencia de algunos nombres. Sin embargo, el hecho de que XAML sea un lenguaje declarativo basado en texto similar a XML y HTML que no requiere un compilador, permite a los diseñadores de interfaces crear archivos XAML separados para luego integrarlos con el código detrás de los archivos. Esto es diferente al caso de los formularios de Windows donde la GUI está estrechamente acoplada como código de procedimiento en el proyecto. Los diseñadores que usan XAML podrían incluso abandonar Visual Studio y usar la herramienta MS Expression Blend para crear su GUI. MS Expression Blend está creado para diseñadores en lugar de programadores.
XAML proporciona técnicas nativas avanzadas para animación y visualización de video sin la necesidad de herramientas de terceros.
XAML tenía la intención de hacer que el desarrollo de software basado en Windows y páginas web fuera más cercano de lo que estaba usando ASP.NET y Windows Forms. Silverlight y WPF usan XAML (aunque existen algunas diferencias, pero gran parte de la experiencia es transferible).
Un SDK para XAML incluye controles interesantes y le permite, entre otras funciones, admitir la presentación de asistentes / guiones gráficos sin usar una herramienta de terceros.
fuente
En teoría, cada idioma nuevo es algo que necesitas aprender. Muchas personas preferirían hablar muchos / múltiples idiomas, ya que se considera riqueza lingüística. Esto existe y está relacionado con los lenguajes naturales, pero no es necesario para los lenguajes de programación.
Yo solo tengo programación en muchos idiomas, incluidos archivos por lotes, perl, lua, python, c ++ y c #. ¿Me acuerdo de todos ellos? No, puedo cambiar usando otro idioma, pero lleva tiempo. Simplemente escribiendo ahora en C #, luego cambie a C ++, puede mezclar fácilmente si es NULL, null, nil o nullptr dependiendo del lenguaje de programación y es "dialecto". (c ++ normal, c ++ administrado)
xaml es xml "dialecto". Es fácil de aprender ? basado en muchas preguntas en otros foros, diría que no.
¿Reemplaza C #? No.
La respuesta es bastante obvia: preferiría tener un lenguaje de programación, que esté bien diseñado (C #, por ejemplo, reflexión de tipo de datos), tenga un buen rendimiento (como C ++) y se pueda programar (C # -script, C ++ / cling o incluso mejor)
Actualmente, C ++ y C # no satisfacen completamente mis necesidades, pero xaml es un formato de datos extraño, que no consideraría que valga la pena aprender (solo envolverlo y ocultarlo a los ojos del desarrollador)
Al final, me gustaría recombinar el lenguaje natural (hablado) con el lenguaje de programación (lenguaje artificialmente construido) en el mismo idioma, para que pueda ser utilizado para la comunicación y por los programadores, esto es más adelante en el futuro, cuando la "arquitectura" del lenguaje de programación o "patrones de diseño" comenzarán a documentarse.
De hecho, XAML presenta algunas características nuevas y mejoradas sobre las formas win, por lo que vale la pena considerar usarlo. Pero eventualmente, si desea que su interfaz de usuario se vuelva completamente dinámica, xaml debe ser reemplazado por un código de tiempo de ejecución similar.
Eventualmente, la interfaz de usuario debería ser fácil de usar, y eso significa un conjunto mínimo de controles, los controles se ven similares (cancelar, aceptar, accesos directos, mismo ancho / alto, etc.), lo que significa que la IU puede generarse más o menos automáticamente.
Por cierto, ¿es posible incrustar directamente en el código xaml C #? Metadatos, cadena, comentarios?
A veces es bueno usar mal o abusar del lenguaje de una manera que nadie imaginó que se usaría. Perl hace esto mucho, pero prefiero una sintaxis más limpia que críptica. Pero C # versus xaml: elegiría C #.
fuente
Una ventaja es que el XAML puede usarse en otras aplicaciones. Un buen ejemplo es que un diseñador / artista puede desarrollar el XAML en Blend mientras que las partes internas (código subyacente) se codifican en Visual Studio.
Creo que fue el intento de Microsoft de separar el marcado de la interfaz de usuario versus el código subyacente y hacer posible que los usuarios que no son programadores codifiquen la interfaz de usuario utilizando una herramienta como Blend.
Pero, muchas tiendas no tienen Blend, por lo que para muchos de nosotros parece una reinvención de la rueda.
Aquí hay 8 puntos comprados por alguien más cercano al cliente de Windows:
8 Beneficios XAML
fuente
Un punto que no veo en muchas respuestas es que xaml encierra el núcleo de los principios de diseño de wpf. Separe la representación visual y la lógica visual (en la práctica, esto se limita a los desencadenantes y demás, pero suponiendo que no haya controles personalizados, esto es a menudo todo lo que necesita) de la lógica empresarial. Esto también se combina bien como otros han notado con una sintaxis expresiva para propiedades vinculantes, vinculadas y otros metadatos que pueden ser más detallados en el código C # normal.
En una nota de opinión más personal, una cosa que me agrada de xaml es que beter representa la jerarquía visual de los controles que solo genera código. De un vistazo, es fácil ver cómo un control está relacionado con los otros.
fuente