¿Habéis creado alguna vez una aplicación en vuestro Windows Vista / 7 y al probarlo en un Windows XP habéis visto que no se ve igual?
Si hacéis alguna aplicación en la que os ponéis a cambiar un poco el apartado visual, comprobaréis que en XP no se ve igual ni por asomo.
Por ejemplo, imaginad que tenéis una ventana y esta ventana tiene un Border y lo quereis poner azul. Creais un estilo para que los bordes sean azules.
Además de eso, la ventana tiene un TabControl con sus pestañas ahi majas.
Nada, ejecutás la aplicación, sale la ventana y de puta madre, los Border salen en azul y el resto sigue bien, ya que el estilo es solo para dicho control.
Ahora se lo pasais a algun colega que tiene XP y os dice… macho, vaya pedazo de birria de programa que has hecho… Y tu… No está tan mal…
Le decís que os pase una screenshot y sorpresa, ves recuadros azules por todos lados, las pestañas del TabControl tienen 1-2 recuadros azules ahi por la cara (Es porque dichas pestañas estan compuesta por un Border entre otras cosas).
No solo eso, los colores pueden aparecer en otra tonalidad, si usais sombras ya podeis despediros de ellas…
En resumen, cualquier floritura extra que le pongás, en XP no se va a ver igual ni por asomo.
Pero hay una solución….
¡Forzar a la aplicación a usar el estilo de Vista / 7 aunque sea en XP!
¿Cómo? En dos simples pasos:
Añadimos una referencia a nuestra aplicación:
PresentationFramework.Aero
Vamos, es el .dll para usar el aspecto gráfico de Vista / 7. Este .dll viene por defecto, no hace falta bajar nada.
Ahora en nuestro App.xaml, tenemos que añadir un diccionario de recursos nuevo. Si no os acordás o no lo sabeis, la forma de meter diccionarios en el App.xaml es fusionando todos los diccionarios que queramos de ésta forma:
<Application.Resources> <ResourceDictionary> <ResourceDictionary.MergedDictionaries> <!--Diccionarios--> </ResourceDictionary.MergedDictionaries> </ResourceDictionary> </Application.Resources>
En este caso, tenemos que meter un diccionario que existe dentro de PresentationFramework.Aero:
<Application.Resources> <ResourceDictionary> <ResourceDictionary.MergedDictionaries> <ResourceDictionary Source="/PresentationFramework.Aero;V3.0.0.0;31bf3856ad364e35;component/themes/aero.normalcolor.xaml" /> </ResourceDictionary.MergedDictionaries> </ResourceDictionary> </Application.Resources>
o si usamos WPF 4:
<Application.Resources> <ResourceDictionary> <ResourceDictionary.MergedDictionaries> <ResourceDictionary Source="/PresentationFramework.Aero;V4.0.0.0;31bf3856ad364e35;componentthemes/aero.normalcolor.xaml"/> </ResourceDictionary.MergedDictionaries> </ResourceDictionary> </Application.Resources>
Con esto forzaremos a nuestra aplicación a usar el tema Aero (podemos cambiarlo por otro si queremos) aunque nuestro SO no esté usando dicho tema actualmente.
Asunto solucionado.
Hasta otra
Tags: WPF


hola, he presentado el mismo problema que al que se hace referencia aqui, segui los pasos indicados, e incluso cuandi le hice una referencia al Framework 3.0 del wpf que uso, le hice una copia al local al mismo, pero poniendo la direccion justo como esta escrita en la pagina, el Blend dice que no encuentra dicho fichero aunque levanta la aplicacion pero sin cambio alguno y cuando le doy exacato la ubicacion donde se copio la dll del framework, el cual se copio en elbindebug entonces el error es de VisualStudio “XamlParsetException was unhandled” diciendo que no pudo encontrar el fichero. que puedo hacer??
Pero no entiendo, el problema es sencillo y la solución lo es más…
Me dices que las aplicaciones en XP no se ven como debería de verse, simplemente añade la entrada al app.xaml como indico, añade la referencia del PresentationFramework.Aero al proyecto y debería de funcionar.
Lo que no te puedo asegurar es que en tiempo de diseño con VS / Blend se vea como dios manda ya que no he probado nunca a programar en XP.
Pensandolo 2 veces, si usas XP, es probable que ese dll no esté instalado en tu sistema, pero no creo realmente. ¿Te aparece cuando le das a añadir referencia?
Esto funciona en un proyecto de C# con windows form
Que yo sepa esto es solo para WPF.
abra un forma de hacer eso mismo con windows form