2009-10-23 10 views
7

È "facile"!Come si porta un tema da Silverlight a WPF?

Mi sono imbattuto in this blog post by Rudi Grobler che dice che è "facile" portare un tema da Silverlight a WPF. Sfortunatamente, non dice come farlo.


Scaricare e installare

Ho installato sia la WPF Toolkit e Silverlight Toolkit da Codeplex.

Sono anche andato a cercare the source code for the theme I'm interested in (BureauBlue) (avviso, questo richiede un po 'di tempo per caricare) e incollato in un nuovo file del dizionario delle risorse nel mio progetto di test.


Ut oh, riferimenti interrotti

un sacco di linee blu ondulata.

alt text http://img32.imageshack.us/img32/6032/brokenreferences.jpg


Nessun riferimento qui

Così, sono andato a aggiungere i riferimenti e scoperto ... non sono elencati.

alt text http://img35.imageshack.us/img35/7466/addreferencedialog.jpg


Ahh, ci si sono

Per fortuna, sono stato in grado di trovare loro dopo una certa vasta navigazione.

alt text http://img269.imageshack.us/img269/3830/addreferencedialogbrows.jpg


E così li

ho aggiunto Avendo trovato i riferimenti mancanti, ho cercato di aggiungerli. Questo in realtà sembrava risolvere i rotti xmlns collegamenti (almeno le linee ondulate blu è andato via), ma quando ho costruito il mio progetto ho ottenuto un errore:

Error 1 Unknown build error, 'Cannot resolve dependency to assembly 'System.Windows, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e' because it has not been preloaded. When using the ReflectionOnly APIs, dependent assemblies must be pre-loaded or loaded on demand through the ReflectionOnlyAssemblyResolve event.' NmtConcept


E, quindi chiedo ...

Come faccio a far funzionare un tema Silverlight in WPF?


Aggiornamento !

Bene, pensavo di aver capito. Ho deciso di iniziare con lo DataGrid.Ho capito quali erano tutti gli equivalenti del WPF per gli assembly Silverlight, e in realtà ho ottenuto il mio progetto per la compilazione e l'esecuzione. E poi ho visto il risultato ...

alt text http://img44.imageshack.us/img44/2418/porteddatagrid.jpg

L'intestazione è in qualche modo corretto (tranne che per le frecce di ordinamento mancanti), ma il resto sembra che ci fosse una sorta di terribile incidente che coinvolge mattoncini colorati tan .

Ecco l'esempio su Silverlight Toolkit webpage.

alt text http://img196.imageshack.us/img196/997/silverlightdatagrid.jpg

Quindi, non ha neanche lontanamente.


Quello che ho fatto

Permettetemi di spiegare quello che ho fatto per arrivare a questo pasticcio.


DataGridFrozenGrid

In primo luogo, ho dovuto prendere DataGridFrozenGrid da this Silverlight Toolkit source code page perché WPF non aveva mai sentito parlare di un tale classe.


BureauBlue

Poi ho incollato nella pezzi chiave da the source code for BureauBlue (di nuovo, attenzione: questo bambino è lento da caricare).

Con pezzi chiave, voglio dire:

  1. Tutte le risorse pennello all'inizio del file più
  2. Il Style per ciascuno di questi controlli:

    • DataGridColumnHeader
    • DataGridCell
    • DataGridRowHeader
    • DataGridRow

Stranamente, il file originale conteneva nessuno stile per il DataGrid stesso (per favore correggetemi se sbaglio, ma ho usato Trova e tutto).


Silverlight -> WPF

Successivamente, ho convertito i riferimenti a xmlns equivalenti WPF.Ecco come il mio elemento ResourceDictionary rivelò:

<ResourceDictionary 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:mwc="clr-namespace:Microsoft.Windows.Controls;assembly=WPFToolkit" 
    xmlns:mwcp="clr-namespace:Microsoft.Windows.Controls.Primitives;assembly=WPFToolkit" 
    xmlns:swcp="clr-namespace:System.Windows.Controls.Primitives;assembly=CommonLibraryWpf" 
    xmlns:sw="clr-namespace:System.Windows;assembly=WPFToolkit"> 

Io, naturalmente modificato i tag dello spazio dei nomi da abbinare.


Edit fino a quando non funziona

Una volta ho avuto tutto questo lavoro, ho ancora avuto un paio di problemi minori. Alcuni degli elementi x:Name avevano spazi in essi. Il compilatore non lo permetterebbe, quindi ho dovuto sostituire gli spazi con caratteri di sottolineatura.

Qui ci sono i frammenti rilevanti:

<!-- Important: all underscores used to be spaces --> 
<sw:VisualState 
    x:Name="MouseOver_CurrentRow_Selected"> 
<sw:VisualState 
    x:Name="Normal_CurrentRow"> 
<sw:VisualState 
    x:Name="Normal_Selected"> 
<sw:VisualState 
    x:Name="Normal_EditingRow"> 
<sw:VisualState 
    x:Name="Normal_AlternatingRow" /> 
<sw:VisualState 
    x:Name="Normal_Selected"> 
<sw:VisualState 
    x:Name="MouseOver_Selected"> 
<sw:VisualState 
    x:Name="Unfocused_Selected"> 

La modifica di questi nomi sembrava una pessima idea - e può essere la causa di tutti i miei problemi - ma non sapevo che altro fare per ottenere la cosa da compilare.

L'altro cambiamento che ho dovuto fare è stato: alcune delle SolidColorBrush e LinearGradientBrush oggetti all'inizio usato x:Name invece di x:Key. Li ho modificati tutti a x:Key. Forse anche questa era una cattiva idea, ma ancora una volta, il compilatore mi ha fatto.


Questo mi aiuta ad aiutarmi?

Se dopo tutto ci sei ancora, hai qualche suggerimento?

risposta

2

Fondamentalmente sono arrivato alla conclusione che stavo cercando di inserire un piolo quadrato in un buco rotondo (nonostante affermi che sia "facile"). Silverlight DataGrid è troppo diverso dal WPF Toolkit DataGrid. Quindi, per il momento, ho appena provato a modellare la griglia di dati predefinita per assomigliare a BureauBlue. È un lavoro abbastanza meticoloso e tutt'altro che perfetto, ma è un netto miglioramento rispetto allo stile.

alt text http://img26.imageshack.us/img26/7163/styleddatagrid.jpg

1

Direi che il riferimento non risolto è la versione Silverlight di System.Windows.dll. Dovrai cambiare i riferimenti nel progetto del tema per puntare alla versione WPF delle dll.

Puoi anche guardare il progetto WPF themes (coordinato da Rudi Grobler), che ha già BureauBlue.

+0

Ah, questo ha senso. In realtà ho il dizionario delle risorse per BureauBlue dal progetto Temi WPF, ma non contiene stili per 'DataGrid',' DataPicker' e 'Calendar'. – devuxer

+0

Bene, ho dato un colpo (vedi aggiornamento alla mia domanda), ma non ha funzionato troppo bene. – devuxer

Problemi correlati