2013-01-16 14 views
7

Sto tentando di visualizzare un'icona utilizzando una fonte immagine (.jpg). Creo una proprietà Icon nel modello di vista e provo ad assegnargli il percorso dell'immagine ma non vedo alcuna immagine nella vista. Ho provato a convertire il percorso in immagine Bitmap ma non funziona. C'è qualcosa che mi manca qui?Associazione di origine immagine tramite la proprietà in wpf

<StackPanel Orientation="Horizontal"> 
           <TextBlock Text="{Binding Path=Name}"/> 
           <Image Source="{Binding Path=Icon}"></Image> 
          </StackPanel> 




BitmapImage img = new BitmapImage(); 
        img.BeginInit(); 
        img.CacheOption = BitmapCacheOption.OnLoad; 
        img.CreateOptions = BitmapCreateOptions.IgnoreImageCache; 
        img.UriSource = new Uri("C:\\Users\\Public\\Pictures\\Sample Pictures\\Chrysanthemum.jpg", UriKind.Absolute); 
        img.EndInit(); 
        Icon = img; 
+0

Hai un esempio di Uri si dovrebbe avere in proprietà Icon? L'immagine è una risorsa incorporata o un file libero o sul Web? – slugster

+0

È solo un'immagine .jpg creata da me. L'immagine è memorizzata sul mio desktop. E sto cercando di associarlo alla proprietà Icon. – Virus

+0

E 'Icon' contiene il percorso assoluto del file immagine? – Clemens

risposta

19

Mi sono imbattuto in questo io stesso una volta e, anche se forse non è la soluzione migliore, il seguente ha funzionato per me.

1. Aggiungere le immagini al progetto, ad esempio:

  • creare una cartella di immagini/icone per il vostro progetto e aggiungere le immagini lì.
  • Set azione build di immagini per contenuti (copia se più recente)

2. Creare una proprietà ImageSource:

public ImageSource YourImage 
    { 
     get { return _yourImage; } 
     set 
     { 
      _yourImage = value; 
      NotifyOfPropertyChange(() => YourImage); 
     } 
    } 

(Nota: io uso Caliburn micro per aiutare nella vincolante)

3. Aggiornare il l'ImageSource in questo modo:

  if(!string.IsNullOrEmpty("TheImageYouWantToShow")) 
      { 
       var yourImage = new BitmapImage(new Uri(String.Format("Images/Icons/{0}.jpg", TheImageYouWantToShow), UriKind.Relative)); 
       yourImage.Freeze(); // -> to prevent error: "Must create DependencySource on same Thread as the DependencyObject" 
       YourImage = yourImage; 
      } 
      else 
      { 
       YourImage = null; 
      } 

4. attributo di origine Bind alla proprietà YourImage:

(hai già fatto questo)

+1

Si potrebbe anche considerare l'utilizzo di un convertitore per creare ImageSource da un percorso. – slugster

+0

È obbligatorio aggiungere questa immagine alla soluzione? e sto cercando di farlo da viewmodel, va bene? – Virus

+1

@slugster infatti, ma aggiungerà un sovraccarico in più. È una buona alternativa, ma personalmente non mi piacciono molto i convertitori. – Deruijter

Problemi correlati