2010-10-24 22 views
25

Tengo un par de imágenes configuradas como recursos de la aplicación.Cambiar la imagen de fondo de la ventana de WPF en el código de C#

Cuando se inicia mi solicitud, el fondo de la ventana principal se establece a través de XAML:

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

Si se produce un evento dado, me gustaría cambiar este contexto a otro recurso ("/myapp;component/Images/icon_gray.png").

He intentado usar dos 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"))); 

... pero, naturalmente, me sale una excepción con el URI no válido.

¿Hay una forma simple de cambiar la imagen de fondo (a través de this.Background = ...) de una ventana de WPF utilizando el paquete Uri o el recurso (es decir: Myapp.Properties.Resources.icon)?

Respuesta

34

Qué tal esto:

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

o, alternativamente, esto:

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

Usé el segundo, ya que estaba definiendo una constante estática. ¡Gracias! – biasedbit

6

El problema es la forma en que lo está utilizando en el código. Sólo trate el código de abajo

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

Puede encontrar más detalles sobre esto en
http://msdn.microsoft.com/en-us/library/aa970069.aspx

7

Aquí la versión Xaml

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

i Sólo tiene que colocar una imagen en "d drive-- > Datos -> IMG ". El nombre de la imagen es x.jpg:

Y en C# Tipo de código de

ImageBrush myBrush = new ImageBrush(); 

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

(por favor ponga doble barra en el medio camino)

this.Background = myBrush; 

fin llegué el 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

He estado intentando todas las respuestas aquí sin éxito. Esta es la forma más sencilla de hacerlo con ms-appx

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

activos se encuentra en el primer nivel de mi proyecto, así que asegúrese de cambiar la ruta de lo más conveniente.

Cuestiones relacionadas