WPF: пути к изображениям в ListBox, отображение изображения вместо пути - PullRequest
1 голос
/ 24 февраля 2011

У меня есть ListBox, заполненный путями разных изображений. Как я буду изменять ItemTemplate так, чтобы вместо путей (строки) отображались изображения.

Вот код:

<ListBox>
    <ListBox.ItemTemplate>
        <DataTemplate>
            <Image Height="50" Width="50" Source="{Binding Path=Content}" Stretch="Fill"></Image>
        </DataTemplate>
    </ListBox.ItemTemplate>
    <ListBoxItem>C:\Users\AKSHAY\Pictures\IMG0083A.jpg</ListBoxItem>
    <ListBoxItem>C:\Users\AKSHAY\Pictures\IMG0102A.jpg</ListBoxItem>
    <ListBoxItem>C:\Users\AKSHAY\Pictures\IMG0103A.jpg</ListBoxItem>
    <ListBoxItem>C:\Users\AKSHAY\Pictures\IMG0104A.jpg</ListBoxItem>
    <ListBoxItem>C:\Users\AKSHAY\Pictures\IMG0105A.jpg</ListBoxItem>
    <ListBoxItem>C:\Users\AKSHAY\Pictures\IMG0106A.jpg</ListBoxItem>
</ListBox>

Ответы [ 3 ]

2 голосов
/ 24 февраля 2011

Вы можете создать IValueConverter, который преобразует строку в ImageSource.

Что-то вроде:

public class ImagePathConverter : IValueConverter
{
  public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
  {
      return new BitmapImage(new Uri(value as string));
  }
  public object ConvertBack(xxx) { throw new NotSupportedException(); }
}

, а затем создайте ресурс преобразователя значений и используйте его в привязке.*

ресурс может быть определен как:

<UserControl.Resources>
   <myNameSpaceAlias:ImagePathConverter x:Key="ImagePathConverter"/>
...

, а затем связать с:

{Binding Path=Content, Converter={StaticResource ImagePathConverter}}
0 голосов
/ 24 февраля 2011

ItemTemplate ListBox копируется в ContentTemplate ListBoxItem во время создания пользовательского интерфейса.Однако при прямом добавлении ListBoxItem s ItemTemplate игнорируется для элементов, уже имеющих тип контейнера ItemsControl s (ListBoxItem для ListBox, ListViewItem для ListView и т. Д.).Так что в этом случае вам придется использовать ContentTemplate ItemContainerStyle напрямую.

Кроме того, измените Source="{Binding Content}" на Source="{Binding}"

<ListBox>
    <ListBox.ItemContainerStyle>
        <Style TargetType="ListBoxItem">
            <Setter Property="ContentTemplate">
                <Setter.Value>
                    <DataTemplate>
                        <Image Height="50" Width="50" Source="{Binding}" Stretch="Fill"></Image>
                    </DataTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </ListBox.ItemContainerStyle>
    <ListBoxItem>C:\Users\AKSHAY\Pictures\IMG0083A.jpg</ListBoxItem>
    <ListBoxItem>C:\Users\AKSHAY\Pictures\IMG0102A.jpg</ListBoxItem>
    <ListBoxItem>C:\Users\AKSHAY\Pictures\IMG0103A.jpg</ListBoxItem>
    <ListBoxItem>C:\Users\AKSHAY\Pictures\IMG0104A.jpg</ListBoxItem>
    <ListBoxItem>C:\Users\AKSHAY\Pictures\IMG0105A.jpg</ListBoxItem>
    <ListBoxItem>C:\Users\AKSHAY\Pictures\IMG0106A.jpg</ListBoxItem>
</ListBox>
0 голосов
/ 24 февраля 2011

Вы должны использовать конвертер значений в привязке и передать растровое изображение

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...