2010-01-16 15 views
36

¿Hay alguna manera de hacer que una aplicación WPF parezca que se ejecuta en Windows 7, incluso si se ejecuta en XP? Estoy buscando algún tipo de tema que pueda simplemente pegar. Conozco el proyecto de temas en Codeplex (http://www.codeplex.com/wpfthemes), pero carece de soporte para DataGrid, que es algo que realmente necesito. Estaba pensando que tal vez el tema de Windows 7 sería un puerto fácil, o existe en algún archivo en algún lugar. Cualquier información que tenga (incluso si son malas noticias) sería muy apreciada.Tema de Windows 7 para WPF?

actualización

Usando idea @Lars Truijens, yo era capaz de conseguir el aspecto de Windows 7 para los principales controles, pero por desgracia, no funcionó para el control de WPF Toolkit DataGrid, lo que necesito.

DataGrid se parece a esto con el tema Aero

Windows XP-look DataGrid

DataGrid debería tener este aspecto

Windows 7-look DataGrid

Por lo tanto, todavía estoy buscando un solut a este problema si alguien tiene alguna idea. ¿Tal vez alguien ha construido una extensión para el tema Aero que cubre los controles del kit de herramientas de WPF? De nuevo, cualquier información que tenga es muy apreciada.

Actualización 2 - ¡Problema resuelto!

Para que el tema Aero funcione con los controles WPF Toolkit, solo tiene que agregar un segundo diccionario Aero, por lo que su App.xaml debería verse así.

<Application.Resources> 
    ... 
    <ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary 
       Source="/PresentationFramework.Aero;component/themes/Aero.NormalColor.xaml" /> 
      <ResourceDictionary 
       Source="pack://application:,,,/WPFToolkit;component/Themes/Aero.NormalColor.xaml" /> 
      ... 
     </ResourceDictionary.MergedDictionaries> 
    </ResourceDictionary> 
</Application.Resources> 

Además, yo recomendaría pasar las líneas de división fuera de sus DataGrid controles (porque se ven horribles ):

<DataGrid GridLinesVisibility="None" ...> 
+1

¡Su actualización 2 salvó mi vida! ¡Gracias por publicar esa actualización! – Sonosar

Respuesta

46

WPF viene con los temas estándar de Windows en todas las versiones de Windows. Por ejemplo, puede hacer que el tema Aero (que Vista y Windows 7 uso) en Windows XP con los siguientes pasos:

  1. Añadir PresentationFramework.Aero a la lista de referencias de su aplicación como requiere
  2. Editar su aplicación. xaml

de esta

<Application.Resources> 
    <!-- Your stuff here --> 
</Application.Resources> 

a este

<Application.Resources> 
    <ResourceDictionary> 
    <!-- Put your stuff here instead --> 

    <ResourceDictionary.MergedDictionaries> 
     <ResourceDictionary Source="/PresentationFramework.Aero;component/themes/Aero.NormalColor.xaml"/> 
    </ResourceDictionary.MergedDictionaries> 
    </ResourceDictionary> 
</Application.Resources> 

Fuente:http://mrpmorris.blogspot.com/2008/05/using-vista-aero-theme-in-xp-wpf-apps.html

Otras alternativas siguientes. Asegúrese de agregar el ensamblaje correspondiente a la lista de referencias de su aplicación como lo requiera.

<ResourceDictionary Source="/PresentationFramework.Aero;component/themes/Aero.NormalColor.xaml"/> 
<ResourceDictionary Source="/PresentationFramework.Classic;component/themes/Classic.xaml"/> 
<ResourceDictionary Source="/PresentationFramework.Royale;component/themes/Royale.NormalColor.xaml"/> 
<ResourceDictionary Source="/PresentationFramework.Luna.Homestead;component/themes/Luna.Homestead.xaml"/> 
<ResourceDictionary Source="/PresentationFramework.Luna.Metallic;component/themes/Luna.Metallic.xaml"/> 
<ResourceDictionary Source="/PresentationFramework.Zune;component/themes/Zune.NormalColor.xaml"/> 
+0

+1 ¡Gracias! Voy a probar esto pronto. – devuxer

+0

Finalmente tuve la oportunidad de probar esto. Funciona, pero como temía, no para el control 'DataGrid'. Por favor revisa mi actualización. El aspecto del tema 'DataGrid' con Aero sigue siendo XP. – devuxer

+0

Bueno, acabo de tropezar con una solución al problema 'DataGrid':' '. Actualizaré mi pregunta también. – devuxer

4

Una adición a la respuesta de Lars y actualización de DanM:

Cuando se despliega, se debe añadir el aero DLL en el directorio de instalación.

Puede hacerlo yendo a las propiedades de PresentationFramework.Aero que ha agregado a las referencias y configuración CopyLocal=True. Luego, deberá ir a la herramienta de implementación que esté usando (me encanta WIX ...) y agregarla a la lista de archivos desplegados.

+1

I No creo que PresentationFramework.aero deba ser desplegado. De acuerdo con http://msdn.microsoft.com/en-us/library/ff462634.aspx, está incluido en .NET Framework. –

+1

PresentationFramework.aero no necesita implementarse si se utiliza una referencia completa. Ver mi respuesta aquí: http://stackoverflow.com/questions/8175410/wpf-when-using-presentationframework-aero-do-i-need-to-set-copy-local-to-tru/8185946#8185946 –

Cuestiones relacionadas