2011-04-05 24 views
61

Soy muy nuevo en WPF. Puse un control de imagen en una ventana y me gustaría establecer la imagen en el control a una imagen que está almacenada en un archivo de recursos del proyecto llamado "Resources.resx". El nombre de la imagen en el archivo de recursos es 'Buscar'. ¿Podría alguien mostrarme cómo podría hacer esto?¿Cómo hacer referencia a los recursos de imágenes en XAML?

Respuesta

91

Si la imagen está en la carpeta de recursos y su acción se establece en la acumulación de recursos. Puede hacer referencia a la imagen en XAML de la siguiente manera:

"pack://application:,,,/Resources/Search.png" 

Suponiendo que no tiene ninguna estructura de carpetas en la carpeta de recursos y es una aplicación. Por ejemplo, yo utilizo:

ImageSource="pack://application:,,,/Resources/RibbonImages/CloseButton.png" 

cuando tengo una carpeta RibbonImages nombradas en la carpeta Recursos.

+0

¿Qué representa el espacio de nombre 'paquete'? – Hosea146

+2

aquí hay información sobre el paquete uri: http://msdn.microsoft.com/en-us/library/aa970069(v=VS.90).aspx#The_Pack_URI_Scheme – Viv

+2

Ha pasado un tiempo desde que agregué imágenes a mi aplicación ... . Podría estar trabajando aquí, pero creo que podría necesitar construir su aplicación antes de que muestre la imagen en el diseñador de WPF. – Viv

-2

ya se ha discutido, parece que hay un ejemplo para usted here

También puede echar un vistazo here, donde se puede tener una comprensión más profunda de lo que es posible.

+3

Gracias pero nada vi en ese artículo me ayudó a hacer lo que yo quiero hacer. – Hosea146

22

Si usted tiene una imagen en la carpeta de los iconos de su proyecto y su acción de construcción es "Recursos", puede hacer referencia a ella como esto:

<Image Source="/Icons/play_small.png" /> 

Esa es la forma más sencilla de hacerlo. Esta es la única manera de que pudiera Figura hacerlo únicamente desde el punto de vista de los recursos y no hay archivos de proyecto:

var resourceManager = new ResourceManager(typeof (Resources)); 
var bitmap = resourceManager.GetObject("Search") as System.Drawing.Bitmap; 

var memoryStream = new MemoryStream(); 
bitmap.Save(memoryStream, System.Drawing.Imaging.ImageFormat.Bmp); 
memoryStream.Position = 0; 

var bitmapImage = new BitmapImage(); 
bitmapImage.BeginInit(); 
bitmapImage.StreamSource = memoryStream; 
bitmapImage.EndInit(); 

this.image1.Source = bitmapImage; 
+15

Hay una ligera variación en esto: '' Tenga en cuenta la barra diagonal al inicio, lo que significa que debe buscar en la carpeta raíz. Si el archivo xaml no está en la raíz, esto es necesario ya que sin la barra diagonal, comenzará la búsqueda en el mismo directorio que el archivo xaml. –

+0

Gracias, respuesta actualizada. – RandomEngy

7

Uno de los beneficios de utilizar el archivo de recursos es acceder a los recursos por nombres, por lo que la imagen puede cambiar, el nombre de la imagen puede cambiar, siempre que el recurso se mantenga actualizado se mostrará la imagen correcta.

Aquí es un enfoque más limpio de lograr esto: Suponiendo Resources.resx está en espacio de nombres '' UI.Images, agregar la referencia en su espacio de nombres XAML como esto:

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
xmlns:UI="clr-namespace:UI.Images" 

Indica tu Fuente de la imagen como esta :

<Image Source={Binding {x:Static UI:Resources.Search}} /> donde 'Buscar' es el nombre del recurso.

2
  1. Agregue carpetas a su proyecto y agregue imágenes a estas a través de "Artículo existente".
  2. XAML similar a esto: <Image Source="MyRessourceDir\images\addButton.png"/>
  3. F6 (Crear)
Cuestiones relacionadas