2010-07-29 13 views
7

Próbuję powiązać źródło obrazu do mojego XAML do C#wiązania źródła obrazu w XAML

to działa

<Image Source="images/man.jpg"></Image> 

to nie działa

<Image Source="images/{Binding imagesource}"></Image> 

gdzie ImageSource jest zmienna łańcuchowa w pliku C# tego xaml i jest ustawiona na "man.jpg"

Odpowiedz

0

imagesource musi być rzeczywistym obiektem Image, a nie string.

Oto metoda, która stworzy nowy Image obiekt daną ścieżkę:

public BitmapImage Load(string path) 
{ 
    var uri = new Uri(path); 
    return new BitmapImage(uri); 
} 
+0

To nie działa z jakiegoś powodu.Moja aplikacja nie chce się załadować, ale utknęła w 100%. – nooob

+0

Czy wypróbowałeś pełną ścieżkę lub ścieżkę względną? Powinna być pełna ścieżka. Ponadto wiem, że moja metoda działa w WPF ... może z jakiegoś powodu nie działa z Silverlight. – devuxer

2

Nie można trzymać wiążącą połowie drogi poprzez wartość takiego. To albo wiązanie, albo nie. Zakładając ImageSource jest publicznie dostępny za pośrednictwem DataContext, można to zrobić:

<Image Source="{Binding imagesource}"/> 

Jednakże, jeśli został ustawiony na „man.jpg”, to nie znajdzie się obraz. Albo zestaw ImageSource do pełnej ścieżki („images/man.jpg”) lub użyć konwertera:

<Image Source="{Binding imagesource, Converter={StaticResource RelativePathConverter}}"/> 

Konwerter byłoby poprzedzić „obrazy /” na swojej wartości. Jednak może być konieczne, aby konwerter zwrócił wartość ImageSource zamiast string.

+0

Zmieniłem imagesource na pełną ścieżkę "images/man.jpg" to nadal nie działa. Co masz na myśli, że powinien być publicznie dostępny w DataContext? Zmieniłem jego modyfikator dostępu na publiczny i wykonałem dla niego funkcję get, nadal nie działa. – nooob

+0

Jaki jest twój DataContext? Czy to ustawiłeś? Poszukaj wiążących się błędów w oknie wyjściowym programu Visual Studio. –

+0

Właściwość Image.Source nie jest łańcuchem, więc to nie zadziała. –

3

o to sposób, jak to zrobić w XAML:

dodać do przestrzeni nazw:

xmlns:System="clr-namespace:System;assembly=mscorlib" 

następnie dodać swoje zdjęcia ścieżki

<System:String x:Key="ImageRefresh">/Theme;component/Images/icon_refresh.png</System:String> 
<System:String x:Key="ImageSearch">/Theme;component/Images/icon_search.png</System:String> 

To jak go używać

<Image Height="16" Source="{StaticResource ImageSearch}" Stretch="Uniform" Width="16"/> 

To działa dobrze, ale jeśli wczytasz swój styl xaml do Blend, to stanie się on fałszywy.

Obiekt typu "System.String" nie może być zastosowany do właściwości, która oczekuje typu "System.Windows.Media. Źródło obrazu".

Nie wymyśliłem jeszcze, jak zastąpić System: String tym Media.ImageSource ... ale hej .. działa to dla mnie w Visual Studio.

+0

Znaleziono anwser: http://stackoverflow.com/questions/347614/wpf-image-resources – Rumplin

+0

ImageSource jako statyczny zasób działa w Visual Studio 2012. – ljubomir

1

Obrazy ugryzły mnie w przeszłości. Istnieje pewien porządek wyszukiwania.

Używając "image/man.jpg" może odnosić się do pliku wewnątrz twojego silverlight xap, względnie do lokalizacji pliku XAP. Na przykład może być w YourProject.Web/ClientBin/image/man.jpg.

Najpierw należy rozwiązać problemy, używając pełnych adresów URL i sprawdzić, czy to działa.

Powiązane problemy