[c# - wpf] immagine all'interno di un button...

martedì 02 novembre 2010 - 17.19
Tag Elenco Tags  C#  |  .NET 3.5  |  Visual Studio 2008

hellsmarter83 Profilo | Newbie

so che la mia domanda è banalotta... però... non riesco ad inserire un immagine in un button... ho provato in questo modo:


PlayPause.Content = new BitmapImage(new Uri("pack://application:,,/images/play.png"));



ma così mi fa apparire solo il testo della uri, invece a me servirebbe l'immagine... dove sbaglio???

PS: siccome l'immagine del button deve cambiare durante l'esecuzione, non posso inserirla nel file xaml

steppo1983 Profilo | Newbie

http://www.c-sharpcorner.com/Resources/Detail.aspx?ResourceId=629
Vedi se può essere utile

hellsmarter83 Profilo | Newbie

l'immagine via xaml la so inserire... purtroppo non mi serve, in quanto ho bisogno che l'immagine cambi all'interno del button... quindi mi servirebbe un metodo per inserire l'immagine all'interno del button via c#

alx_81 Profilo | Guru

>l'immagine via xaml la so inserire... purtroppo non mi serve,
>in quanto ho bisogno che l'immagine cambi all'interno del button...
>quindi mi servirebbe un metodo per inserire l'immagine all'interno
>del button via c#
A prescindere dal fatto che il pattern MVVM (Model View View Model) potrebbe aiutarti a gestire in generale dinamismi sul binding tra lo xaml e il "modello" (e quindi ti invito a documentarti su questo ottimo pattern partendo da qui: http://joshsmithonwpf.wordpress.com/2009/02/25/two-model-view-viewmodel-screencasts/) direi che con espressioni di binding e proprietà pubbliche dovresti cavartela.
Andiamo per passo:

1) creazione dello XAML della form di esempio:
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Come vedi ci sono due pulsanti che caricheranno lo sfondo del pulsantone sotto. Nello XAML ho definito il background del button come ImageBrush, il quale si aspetta una stringa ImageSource, che è bindata all'expression SelectedImagePath. Questa chiave è il nome di una proprietà pubblica che scriverai nel code behind:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

la proprietà SelectedImagePath è gestita in modo particolare, con un field e con un test sul cambio del valore in base al passaggio del value. Se il valore è differente dal precedente, allora viene lanciato un metodo che notifica il cambiamento della proprietà al contesto (definito nella Window_Loaded). In questo modo un evento viene lanciato verso l'espressione dell'image brush, che cambia di conseguenza la ImageSource.
Da notare anche l'interfaccia che la window ha implementato. Quella ti serve per rilanciare l'evento di notifica al contesto e quindi di ottenere il cambiamento dello sfondo.

Per maggiori info sulla NotifyPropertyChanged qui:
http://msdn.microsoft.com/it-it/library/ms743695.aspx
--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi

hellsmarter83 Profilo | Newbie

grazie :)
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5