Ho avuto dei bei problemi a creare un applicativo WPF che fosse bello a vedersi ma che incorporasse anche alcune funzionalità del tipo contabile/amministrativo.
Putroppo, per questo tipo di lavori, una griglia è sempre quello che fa al caso nostro, perchè non c'è un modo piu comodo dal punto di vista dell'utente per avere una visione d'insieme e riuscire ad avere un'operatività discreta su quello che sta facendo... questo almeno finchè l'utente vorrà vedere i dati piu o meno come li vede stampati.... necessità che non capisco molto se non stai facendo report, ma fa nulla :)
Comunque, sono dovuto scendere a patti con questa necessità e mi sono dovuto procurare una griglia. Come (spero) sappiate, la Grid presente in WPF non è visuale ma un mero contenitore di oggetti, che può fungere da griglia ma operazioni come il caro vecchio databind di dati complessi pùò risultare nella scrittura di un DataTemplate particolarmente ostico (se non conoscete i DataTemplate e i ControlTemplate, Corrado ha fatto a suo tempo due semplici esempi sia per il primo che per il secondo... magari poi io parlerò meglio dei casini che sono successi a me con detti oggetti :P) e soprattutto una gestione eventi da incubo. Alla fine, abbiamo deciso di basarci su un prodotto di terze parti, che non pubblicizzo perchè non è nel mio stile ma tanto lo sapete tutti che i componenti che girano sono sempre di quelle 4/5 aziende.
Comunque, in questo caso ho avuto la necessità di "skinnare" la griglia con le esigenze del cliente e mi sono scontrato con.... la totale e disarmante mancanza di documentazione coerente per quanto riguarda il theming. Vedere un'applicazione di esempio, e il tema di esempio fornito con la griglia, che fa determinate cose e non vedere scritto _da nessuna parte_ come poterlo replicare credo che sia la cosa piu frustrante che possa capitare ad uno sviluppatore.....
Ovviamente, a questo punto lo sviluppatore si inca**a, entra in hard core mode (non nel senso che apre i vari cloni pornografici di youtube, ma che si mette d'impegno :P) e cerca di trovare un metodo. Nello specifico, io ho preso la DLL contenente il theme pack che mi interessava e l'ho scardinata usando Reflector.
Per farlo, basta sapere come funziona il meccanismo delle risorse: come vi ha detto anche il solito Corrado, ogni risorsa può essere messa in un dictionary esterno, che altro non è che un .XAML, sia nello stesso assembly che in un assembly esterno. Questi XAML in fase di compilazione viene compilato nella DLL come risorsa embedded, quasi come i file .JS o .CSS in ASP.NET. Quasi, però, perchè in realtà non vengono messi dentro gli assembly così come sono, ma vengono sottoposti alla semi-compilazione propria di tutti gli XAML, diventando così BAML (cioè XAML Binario). Il grosso problema è che il nostro amico Reflector "impazzisce" quando cerca di visualizzare dei BAML comportandosi in maniera strana (appaiono faccine e 2 di picche...).
Fortunatamente, ci viene in aiuto la lista degli addin per reflector, in cui troviamo l'impagabile BAML Viewer, che mi ha permesso di salvarmi in solo testo i miei assembly per controllare cosa fa la sporca griglia dietro le quinte.
E per la griglia si, confermo che le funzionalità non sono proprio accennate: facendo una ricerca all'interno della documentazione non si trova neanche la keyword relativa... sigh, peccato rovinare dei così bei lavori prendendo sottogamba la documentazione per il dev che dovrà usarla....