¿Hay alguna manera de escribir una aplicación WinRT (Metro) que también funcione en Windows 7 y Vista?


No podemos simplemente dejar a nuestros clientes que no son capaces de actualizar a Windows 8 durante mucho tiempo en el alerce. Sin embargo, es la demanda para una versión "tablet"/"touch" de nuestra aplicación.

Entonces, ¿cómo podemos admitir touch with Metro en Windows 8 y nuestros clientes actuales desde una sola base de código?

Cuando WPF salir, después de un montón de "Empujar" Microsoft vio desde y hacer que funcione en Windows XP – tiene algo como esto se ha hablado de WinRT.

(no soy se espera que cualquier solución funcione en XP, ya que el soporte de XP se está agotando.)

Ver también: Puede la versión ARM de Windows 8 solo ejecutar aplicaciones de estilo Metro (WinRT)?

Author: Community, 2011-09-15

5 answers

La mejor respuesta es que no desea que la misma aplicación se ejecute en Windows 7 y Windows 8 estilo Metro. La interfaz de usuario que funciona mejor para mouse y teclados (Windows 7) no funcionará bien para una presentación táctil y viceversa. Es importante volver a imaginar la interfaz de usuario para los dos mundos diferentes.

Dicho esto, tiene 2 opciones si desea compartir mucho del código: 1) Escribirlo en gran medida en JavaScript / HTML5. Esto le permitirá reutilizar muchos de los activos (especialmente el partes de lógica de negocio). 2) Escríbelo en (escritorio) Silverlight. El Silverlight XAML es el más cercano a Windows XAML. WPF está más lejos y requerirá más trabajo posterior.

En cualquier caso, debe observar y seguir los principios utilizados al escribir código multiplataforma. Comprenda las dependencias de la plataforma y aíslelas detrás de límites indirectos. Desea localizar todo el código que tendrá que cambiar. Por ejemplo, no desea llamadas a las API de. net System. IO. File que usted sabe que tendrá que cambiar a Windows.Sistema.Las llamadas de almacenamiento se dispersan por todo el código. En su lugar, desea que se localice en una función que se pueda modificar más tarde.

 17
Author: Steve Rowe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-09-16 08:01:11

La única manera que se me ocurre es implementar su aplicación en HTML5/CSS3/JS, y evitar el uso de las API de WinRT en la medida de lo posible - esto puede ser factible dependiendo de lo que, exactamente, su aplicación necesita hacer (por ejemplo, gráficos 2D portátiles es fácil con HTML5 canvas).

Entonces, para Win8, empaquetarás esto como Metro web app. Para Win7 y por debajo, escribes una aplicación simple que incorpora tu navegador de elección (no IE9, ya que no funciona en XP, por lo que Firefox o Chrome) con todos los chrome ocultos, y carga tu aplicación HTML5 dentro de ese navegador integrado.

 4
Author: Pavel Minaev,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-09-15 09:03:29

Como otros han señalado, no querrá tener exactamente la misma aplicación funcionando en Win8 Metro y Win7 / Vista Desktop. Si estructura su aplicación correctamente, utilizando un patrón de diseño suitabel, es posible compartir bastante código entre las distintas versiones que requeriría. Para la versión Win8, utilizará WinRT, para Win7 / Vista puede elegir entre Silverlight o WPF.

He publicado un par de artículos que demonstran cómo esto puede hecho, que incluyen un poco de código también:

 4
Author: ColinE,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-09-25 06:31:54

Es poco probable que veamos a Microsoft impulsar el estilo Metro marco de aplicación volver a versiones anteriores debido al nivel de re-arquitectura que entró en Windows 8.

Estoy de acuerdo con Zac en este punto. Parece que Microsoft está definitivamente empujando tanto la tecnología como la usabilidad hacia adelante con la introducción de Windows 8 (y Windows Runtime).

La Metro UI es un paradigma de UI diferente. Si su uso de la corriente Win32 controles (que incluye controles WPF), su aplicación parece muy anticuado en Metro. La única manera de arreglarlo es vuelva a implementar la interfaz de usuario (sus clases de vista en un diseño MVVM) usando Metro controles. Sin embargo, C# y la mayoría de las API de. NET son de primera clase ciudadanos en este nuevo entorno. El resto de su solicitud debe que estés bien.

Como ya tiene lo que asumo una aplicación bastante grande, su mejor solución sería separar su vista de su model-viewmodel . A continuación, puede seguir desarrollando tanto Windows 8 Metro de pantalla completa interfaz táctil impresionante y el "clásico" interfaz de ventana (lo que hemos hecho durante el último x número de años). Con una buena separación, diseño y una excelente solución de control de código fuente ( es decir, Perforce) podrá compartir una gran parte del código base.


Además de las respuestas dadas a su pregunta reciente sobre Windows Runtime Bill Wagner (uno de los muchos bloggers de C# que sigo) ha publicado un resumen en WinRT y managed languages sesiones de conferencias; es una buena lectura y se recomienda si tiene unos minutos. Una de las cosas que aclaró su resumen (en las preguntas frecuentes al final) fue que el futuro de . NET como la marca para el marco que usamos va a ser reemplazado por Windows Runtime.

Otra pieza de La entrada del blog de Bill :

Algunas de las API de. NET son cambio para WinRT. No tengo un lista exhaustiva, y no estoy seguro de que haya uno todavía. Otras API no son expuesto a través de WinRT. (Todavía están disponibles como API de. net, pero no como APIs Metro / WinRT.)

 2
Author: Dennis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:26:42

Es poco probable que veamos Microsoft empujar el marco de aplicaciones de estilo Metro de nuevo a las versiones anteriores debido al nivel de re-arquitectura que entró en Windows 8.

Como dijo Pavel, si evitó que su aplicación usara la mayor cantidad posible de bibliotecas WinRT, es posible, pero de nuevo, ahora está construyendo una aplicación web regular.

 1
Author: Zac Brown MSFT,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-09-15 21:40:26