View Full Version : [C#]Cambiare Style ad un controllo da codice
pano1974
12-01-2012, 13:37
Ciao a tutti,
sono alle prime armi con WPF e mi serve un piccolo aiuto.
Sto facendo un programmino per imparare appunto ad usare WPF in cui da run time aggiungo dei nuovi controlli nei vari pannelli della mia window e fin qui nessun problema.
Tramite expresssion blend 4 ho creato degli stili per vari controlli (button,thumb ecc..) e finchè inserisco da visualstudio i controlli non ho problemi ad assegnare i nuovi stili ai vari controlli.
Il problema sussiste per i nuovi controlli che si aggiungono a runtime.
Come faccio a dire al nuovo pulsante (per esempio) di usare uno stile di un determinato resourcedictionary?
cioè che cosa devo mettere nella seguente riga di codice (sempre che basti solo questa):
button1.Style=???????
Ho cercato in rete per un paio di ore ma mi si riportava sempre ad esempi di codice XAML!
grazie in anticipo a chi mi aiuterà.
Ho cercato in rete per un paio di ore ma mi si riportava sempre ad esempi di codice XAML!
Perche' e' giusto cosi'.
I controlli peraltro non si aggiungono a runitme dal code behind.
Una corretta descrizione dello XAML evita questo passaggio. Il code behind dovrebbe essere quanto di piu' breve possibile, e possibilmente senza logica.
Comunque se proprio vuoi farlo da codice, supponendo che tu abbia inserito lo style in una ResourceDictionary accessibile da quel codebehind, dovrai eseguire qualcosa come
button1.Style = FindResource("MyStyleForButton") as Style;
Kralizek
13-01-2012, 09:05
Perche' e' giusto cosi'.
I controlli peraltro non si aggiungono a runitme dal code behind.
Una corretta descrizione dello XAML evita questo passaggio. Il code behind dovrebbe essere quanto di piu' breve possibile, e possibilmente senza logica.
Comunque se proprio vuoi farlo da codice, supponendo che tu abbia inserito lo style in una ResourceDictionary accessibile da quel codebehind, dovrai eseguire qualcosa come
button1.Style = FindResource("MyStyleForButton") as Style;
puoi espandere questo concetto? sono un niubbo completo in wpf. per lo piú per quanto riguarda la "filosofia" alle spalle :)
Ovviamente dipende da cosa vorresti fare.
Cosa vorresti fare esplicitamente? Ovvero, perche' hai l'esigenza di creare controlli al volo nel codebehind?
Pixel452
13-01-2012, 09:24
Quello che ti posso dire è: LEGGITI UN LIBRO!!!! Sembra una frase brutale, ma è la cosa migliore che puoi fare per imparare velocemente. Se vuoi proprio partire bene con WPF, dopo esserti letto un buon libro approfondisci il design pattern MVVM se non è già spiegato nel libro, un must!!!
Ecco alcuni link utili sul MVVM:
http://msdn.microsoft.com/en-us/magazine/dd419663.aspx
http://wpftutorial.net/MVVM.html
http://www.codeproject.com/KB/WPF/mvvmbiginnerlearning.aspx
pano1974
13-01-2012, 10:51
Perche' e' giusto cosi'.
I controlli peraltro non si aggiungono a runitme dal code behind.
Una corretta descrizione dello XAML evita questo passaggio. Il code behind dovrebbe essere quanto di piu' breve possibile, e possibilmente senza logica.
Comunque se proprio vuoi farlo da codice, supponendo che tu abbia inserito lo style in una ResourceDictionary accessibile da quel codebehind, dovrai eseguire qualcosa come
button1.Style = FindResource("MyStyleForButton") as Style;
Purtroppo mi capita spesso nei programmi che faccio di dover usare un numero di controlli che dipende da qualche impostazione o file di config e quindi di inserirli a runtime.
Programmando in winform non ci sono mai stati problemi di questo tipo ma essendo moooolto inesperto di wpf non so.
Forse a questo punto mi converrebbe costruire dei controlli personalizzati contenente il mio controllo (button,checkbox etc..) e personalizzare lo stile a questo...forse!
Pixel452
13-01-2012, 10:59
Non c'è nessun problema a creare controlli a runtime o da file di configurazione, solo che in WPF si fa in modo differente rispetto a WinForm od alle vecchie tecnologie. Ti consiglio caldamente di documentarti prima di partire in quinta, WPF è molto diverso dai suoi predecessori, non va programmato coi vecchi modelli in testa!!!
pano1974
13-01-2012, 13:24
Non c'è nessun problema a creare controlli a runtime o da file di configurazione, solo che in WPF si fa in modo differente rispetto a WinForm od alle vecchie tecnologie. Ti consiglio caldamente di documentarti prima di partire in quinta, WPF è molto diverso dai suoi predecessori, non va programmato coi vecchi modelli in testa!!!
infatti me ne sono accorto e posso confermare quello che dicono su tanti forum che per chi viene da winform ha una curva di apprendimento molto più ripida di chi comincia da zero a programmare proprio perchè si è abituati a programmare in una determinata maniera anche se si sono usati tutti i pattern immaginabili.
Ad esempio, lo sai che e' possibile assegnare uno stile a tutta una classe di controlli?
Ad esempio: Tutti i Button devono avere questo style.
oppure: Tutte gli GridViewColumHeader devono avere questo style, indipendentemente dal fatto che io ne istanzi uno esplicitamente oppure istanzi una GridView che a sua volta ne conterra' alcuni.
E ovviamente lo style verra' applicato anche alle GridViewColumHeader eventualmente create al volo, sia quelle creati al volo come letteratura suggerisce, sia quelle create al volo dal codebehind e poi aggiunte da qualche parte nella pagina (come gia' detto via sconsigliata)
pano1974
14-01-2012, 12:25
Ad esempio, lo sai che e' possibile assegnare uno stile a tutta una classe di controlli?
Ad esempio: Tutti i Button devono avere questo style.
oppure: Tutte gli GridViewColumHeader devono avere questo style, indipendentemente dal fatto che io ne istanzi uno esplicitamente oppure istanzi una GridView che a sua volta ne conterra' alcuni.
E ovviamente lo style verra' applicato anche alle GridViewColumHeader eventualmente create al volo, sia quelle creati al volo come letteratura suggerisce, sia quelle create al volo dal codebehind e poi aggiunte da qualche parte nella pagina (come gia' detto via sconsigliata)
questo già lo sapevo. :)
vBulletin® v3.6.4, Copyright ©2000-2026, Jelsoft Enterprises Ltd.