2010-10-24 19 views
25

Ho un paio di immagini configurate come risorse dell'applicazione.Modifica l'immagine di sfondo della finestra WPF nel codice C#

Quando la mia applicazione si avvia, lo sfondo della finestra principale viene impostata tramite XAML:

<Window.Background> 
    <ImageBrush ImageSource="/myapp;component/Images/icon.png" /> 
</Window.Background> 

Se si verifica un determinato evento, mi piacerebbe cambiare questo sfondo ad un'altra risorsa ("/myapp;component/Images/icon_gray.png").

Ho provato con due costanti:

private static readonly ImageBrush ENABLED_BACKGROUND = 
    new ImageBrush(new BitmapImage(new Uri("/myapp;component/Images/icon.png"))); 
private static readonly ImageBrush DISABLED_BACKGROUND = 
    new ImageBrush(new BitmapImage(new Uri("/myapp;component/Images/icon_gray.png"))); 

... ma, naturalmente, ottengo un'eccezione con URI non valido.

C'è un modo semplice per modificare l'immagine di sfondo (tramite this.Background = ...) di una finestra WPF utilizzando il pacchetto Uri o la risorsa (ad esempio: Myapp.Properties.Resources.icon)?

risposta

34

Che dire di questo:

new ImageBrush(new BitmapImage(new Uri(BaseUriHelper.GetBaseUri(this), "Images/icon.png"))) 

o, in alternativa, in questo modo:

this.Background = new ImageBrush(new BitmapImage(new Uri(@"pack://application:,,,/myapp;component/Images/icon.png"))); 
+0

Utilizzato il secondo, poiché stavo definendo una costante statica. Grazie! – biasedbit

6

Il problema è il modo in cui lo si utilizza nel codice. Basta provare il codice qui sotto

public partial class MainView : Window 
{ 
    public MainView() 
    { 
     InitializeComponent(); 

     ImageBrush myBrush = new ImageBrush(); 
     myBrush.ImageSource = 
      new BitmapImage(new Uri("pack://application:,,,/icon.jpg", UriKind.Absolute)); 
     this.Background = myBrush; 
    } 
} 

Potete trovare ulteriori informazioni su questo in
http://msdn.microsoft.com/en-us/library/aa970069.aspx

7

Qui la versione Xaml

<Window.Background> 
    <ImageBrush> 
     <ImageBrush.ImageSource> 
      <BitmapImage UriSource="//your source .."/> 
     </ImageBrush.ImageSource> 
    </ImageBrush> 
</Window.Background> 
0

ho appena metto un immagine in "d drive-- > Dati -> IMG ". Il nome dell'immagine è x.jpg:

E su c tipo # codice

ImageBrush myBrush = new ImageBrush(); 

myBrush.ImageSource = new BitmapImage(new Uri(BaseUriHelper.GetBaseUri(this), "D:\\Data\\IMG\\x.jpg")); 

(si prega di mettere doppia barra tra cammino)

this.Background = myBrush; 

finalmente ho ottenuto il fondo .. enter image description here

0
Uri resourceUri = new Uri(@"/cCleaner;component/Images/cleanerblack.png", UriKind.Relative); 
      StreamResourceInfo streamInfo = Application.GetResourceStream(resourceUri); 
      BitmapFrame temp = BitmapFrame.Create(streamInfo.Stream); 
      var brush = new ImageBrush(); 
      brush.ImageSource = temp; 
      frame8.Background = brush; 
0

Ho provato tutte le risposte qui senza successo. Ecco il modo più semplice per farlo con MS-appx

cartella
 ImageBrush myBrush = new ImageBrush(); 
     Image image = new Image(); 
     image.Source = new BitmapImage(new Uri(@"ms-appx:///Assets/background.jpg")); 
     myBrush.ImageSource = image.Source; 
     TheGrid.Background = myBrush; 

beni è nel primo livello del mio progetto, quindi assicuratevi di modificare il percorso più comodo.

Problemi correlati