2013-01-16 12 views
7

Próbuję wyświetlić ikonę przy użyciu źródła obrazu (.jpg). Tworzę właściwość Ikona w widoku modelu i próbuję przypisać jej ścieżkę do obrazu, ale nie widzę żadnego obrazu w widoku. Próbowałem przekonwertować ścieżkę do obrazu bitmapowego, ale nie działa. Czy jest tu coś, czego mi tutaj brakuje?Powiązanie źródła obrazu za pomocą właściwości 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

masz ty przykład URI należy mieć w nieruchomości ikon? Czy obraz jest zasobem osadzonym, plikiem luźnym lub w Internecie? – slugster

+0

To tylko obraz .jpg stworzony przeze mnie. Obraz jest przechowywany na moim pulpicie. I próbuję powiązać go z właściwością Icon. – Virus

+0

A "Ikona" zawiera bezwzględną ścieżkę pliku obrazu? – Clemens

Odpowiedz

19

Wpadłem na to sam raz i choć może nie było to najlepsze rozwiązanie, dla mnie zadziałały poniższe.

1. Dodaj zdjęcia do swojego projektu, na przykład:

  • utworzyć folder obrazów/ikony do projektu i dodać tam obrazy.
  • Set build działanie obrazów do treści (kopiowanie czy nowsza)

2. Utwórz właściwość ImageSource:

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

(Uwaga: używam Caliburn mikro pomagają w wiązaniu)

3. Zaktualizuj ImageSource w ten sposób:

  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. Bind atrybut źródło własności YourImage:

(już to zrobił)

+1

Można również rozważyć użycie konwertera do utworzenia źródła ImageSource ze ścieżki. – slugster

+0

Czy konieczne jest dodanie tego obrazu do rozwiązania? i próbuję zrobić to z viewmodel, czy to w porządku? – Virus

+1

@sterster rzeczywiście, ale doda dodatkowe obciążenie. To dobra alternatywa, ale osobiście nie przepadam za konwerterami. – Deruijter

Powiązane problemy