2012-01-04 2 views
1

я имел следующий очень простой код, который, конечно, работал:Укажите источника изображения

<Image Source="Resources\data_store.png"/> 

Дело в том, что я теперь должен взять строку из свойства («имя») из объект, который дается как ItemSource и я не удается получить привязку к нему

Я попробовал их, но ни один работа:

<Image Source=name/> 
<Image Source=Path="name"/> 
<Image Source=Path=name/> 
<Image Source={Path="name"}/> 
<Image Source={Path=name}/> 
<Image Source={Binding name}/> 

Мой объект установлен в C# коде, и я не думаю, что это меняет что-то ...

ответ

2

В коде позади, убедитесь, что вы определили в качестве источника собственности:

public string Name{get;set;} 

затем связывания работает следующим образом:

<Image Source="{Binding Name, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type UserControl}}}" /> 

Если вы хотите динамически обновлять изображение, вы будете необходимо выполнить INotifyPropertyChanged и вызвать PropertyChanged при изменении изображения.

+0

Это не сработает, Source не имеет тип string. – ColinE

+0

По крайней мере, в Silverlight это работает, поскольку механизм привязки способен преобразовать строку в URI. – Nuffin

+0

Кажется, что работает, но у меня нет изображения. Я чувствую, что ваш код прав, но мои строки похожи на «Resources \\ data_store.png», с двойным /, и я чувствую, что это то, что терпит неудачу при конвертации, я прав? –

1

Парсер XAML довольно умный, когда он встречается:

<Image Source="Resources\data_store.png"/> 

Он знает, что Source свойство имеет ImageSource и будет использовать подходящий конвертер для загрузки ресурса указанного. Если вам нужно установить источник изображения в кодировку или через привязку, вам нужно сделать это самостоятельно с помощью конвертера значений. Следующий конвертер значение будет делать трюк:

public classImageUriConverter : IValueConverter 
{ 
    publicImageUriConverter() 
    { 
    } 

    public objectConvert(objectvalue, TypetargetType, objectparameter, System.Globalization.CultureInfo culture) 
    { 
     Urisource = (Uri)value; 
     return newBitmapImage(source); 
    } 

    public objectConvertBack(objectvalue, TypetargetType, objectparameter, System.Globalization.CultureInfo culture) 
    { 
     throw newNotImplementedException(); 
    } 

} 

Предоставлено this blog post.

+0

Я не знал, что это было так умно, потому что, если я ошибаюсь «png» с «pgn», например, у меня нет какой-либо ошибки, но просто нет изображения при выполнении проекта! Во всяком случае, я не знаю, как/где я должен использовать ваш код, в коде? –

Смежные вопросы