2010-01-16 20 views
36

C'è un modo per far sembrare che un'applicazione WPF sia in esecuzione su Windows 7 anche se è in esecuzione su XP? Sto cercando un tipo di tema che posso semplicemente incollare. Sono a conoscenza del progetto di temi su Codeplex (http://www.codeplex.com/wpfthemes), ma manca il supporto per DataGrid, che è qualcosa di cui ho bisogno in modo critico. Stavo pensando che forse il tema di Windows 7 sarebbe semplicemente una porta facile, o esiste già in qualche file da qualche parte. Qualsiasi informazione che hai (anche se è una cattiva notizia) sarebbe molto apprezzata.Windows 7 tema per WPF?

Aggiornamento

Utilizzando @ Lars Truijens idea, sono stato in grado di ottenere l'aspetto di Windows 7 per i maggiori controlli, ma purtroppo non ha funzionato per il controllo WPF Toolkit DataGrid, che ho bisogno.

DataGrid assomiglia a questo con Aero tema

Windows XP-look DataGrid

DataGriddovrebbe simile a questa

Windows 7-look DataGrid

Quindi, sto ancora cercando un solut a questo problema se qualcuno ha qualche idea. Forse qualcuno ha creato un'estensione del tema Aero che copre i controlli del toolkit WPF? Ancora una volta, qualsiasi informazione che hai è molto apprezzata.

Aggiornamento 2 - Problema risolto!

Per far funzionare il tema Aero con i controlli del toolkit WPF, è sufficiente aggiungere un secondo dizionario Aero, quindi la tua App.xaml dovrebbe apparire così.

<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> 

Inoltre, mi sento di raccomandare girando la griglia fuori nelle vostre DataGrid controlli (perché sembrano orribile):

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

Il tuo aggiornamento 2 mi ha salvato la vita !!! Grazie per aver postato questo aggiornamento! – Sonosar

risposta

46

WPF viene fornito con i temi standard di Windows su tutte le versioni di Windows. Ad esempio, è possibile avere il tema Aero (che Vista e Windows 7 uso) su Windows XP con le seguenti operazioni:

  1. Aggiungi PresentationFramework.Aero alla lista delle referenze dell'applicazione come richiede
  2. Modifica la tua app. XAML

da questo

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

a questo

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

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

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

Altre alternative seguenti. Assicurati di aggiungere l'assembly corrispondente all'elenco di riferimento della tua applicazione come richiesto.

<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 Grazie! Darò una prova presto. – devuxer

+0

Ho finalmente avuto la possibilità di provare questo. Funziona, ma come temevo, non per il controllo 'DataGrid'. Si prega di controllare il mio aggiornamento. L'aspetto del tema 'DataGrid' w/Aero è ancora XP. – devuxer

+0

Ben dolce, mi sono imbattuto in una soluzione al problema 'DataGrid':' '. Aggiornerò anche la mia domanda – devuxer

4

One Oltre alla risposta Lars' e l'aggiornamento di daNm:

Durante la distribuzione, è necessario aggiungere l'aero Dll al dir di installazione.

È possibile farlo andando alle proprietà di PresentationFramework.Aero aggiunto ai riferimenti e all'impostazione CopyLocal=True. Quindi, devi andare a qualsiasi strumento di distribuzione che stai usando (adoro WIX ...) e aggiungerlo all'elenco dei file distribuiti.

+1

I non pensare che PresentationFramework.aero debba essere distribuito. Secondo http://msdn.microsoft.com/en-us/library/ff462634.aspx è incluso nel framework .NET. –

+1

PresentationFramework.aero non ha bisogno di essere distribuito se viene utilizzato un riferimento completo. Vedi la mia risposta qui: http://stackoverflow.com/questions/8175410/wpf-when-using-presentationframework-aero-do-i-need-to-set-copy-local-to-tru/8185946#8185946 –