2010-01-13 8 views
7

Tengo un árbol que muestra el directorio y otro panel que muestra los archivos. En este momento, los archivos que se muestran no tienen íconos. Todo lo que sé es la ruta al archivo. Lo que me gustaría hacer es obtener ese ícono de archivos para mostrar en ese panel. Necesito que la salida sea Image.source. Actualmente esto es lo que tengoCargando iconos de una ruta determinada para mostrar en la ventana de WPF

private ImageSource GetIcon(string filename) 
    { 
     System.Drawing.Icon extractedIcon = System.Drawing.Icon.ExtractAssociatedIcon(filename); 
     ImageSource imgs; 

     using (System.Drawing.Icon i = System.Drawing.Icon.FromHandle(extractedIcon.ToBitmap().GetHicon())) 
      { 
       imgs = Imaging.CreateBitmapSourceFromHIcon(
             i.Handle, 
             new Int32Rect(0, 0, 16, 16), 
             BitmapSizeOptions.FromEmptyOptions()); 
      } 

     return imgs; 

A partir de ahí llamar a mi quedará grabado y tratar de cambiar su icono por defecto con:

ImageSource i = GetIcon(f.fullname) 
ic.image = i 

ic es el elemento dado a la lista, f.fullname contiene la ruta aquí es el obtener y establecer la imagen de

 public BitmapImage Image 
     { 
      get { return (BitmapImage)img.Source; } 
      set { img.Source = value; } 
     } 

no funciona y esta es una de las muchas maneras que he probado que dice que no puede emitir los diferentes tipos. ¿Alguien tiene una manera de hacer esto?
Estoy completamente perdido.

Respuesta

4

Supongo que img es un control estándar Image.

Su propiedad Image es del tipo BitmapImage, que es un tipo específico de ImageSource. CreateBitmapSourceFromHIcon devuelve una instancia de una clase interna llamada InteropBitmap, que no se puede convertir a BitmapImage, lo que da como resultado un error.

que necesita para cambiar la propiedad de ImageSource (o BitmapSource, que CreateBitmapSourceFromHIcon devoluciones, y hereda ImageSource), así:

public ImageSource Image 
{ 
    get { return img.Source; } 
    set { img.Source = value; } 
} 
Cuestiones relacionadas