2010-10-24 6 views
25

J'ai plusieurs images configurées comme ressources d'application.Modifier l'image d'arrière-plan de la fenêtre WPF dans le code C#

Quand mon application démarre, l'arrière-plan de la fenêtre principale est réglée via XAML:

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

Si un événement donné a lieu, je voudrais changer ce contexte à une autre ressource ("/myapp;component/Images/icon_gray.png").

J'ai essayé d'utiliser deux constantes:

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"))); 

... mais naturellement, je reçois une exception avec l'URI non valide.

Existe-t-il un moyen simple de modifier l'image d'arrière-plan (via this.Background = ...) d'une fenêtre WPF en utilisant le pack Uri ou la ressource (par exemple: Myapp.Properties.Resources.icon)?

Répondre

34

Qu'en est-ce:

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

ou bien ceci:

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

Utilisé le second, puisque je définissais une constante statique. Merci! – biasedbit

6

Le problème est la façon dont vous utilisez dans le code. Essayez le code ci-dessous

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; 
    } 
} 

Vous pouvez trouver plus de détails sur ce à
http://msdn.microsoft.com/en-us/library/aa970069.aspx

7

Voici la version Xaml

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

je place une seule image dans "d drive-- > Données -> IMG ". Le nom de l'image est x.jpg:

Et C# type de code

ImageBrush myBrush = new ImageBrush(); 

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

(s'il vous plaît mettre double barre oblique entre chemin)

this.Background = myBrush; 

enfin j'ai obtenu l'arrière-plan .. 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

J'ai essayé toutes les réponses ici sans succès. Voici la façon la plus simple de le faire avec ms-appx

dossier
 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; 

actifs est dans le premier niveau de mon projet, alors assurez-vous de changer le chemin aussi pratique.