Добавление рисунка в ListBox

Рейтинг: 1Ответов: 1Опубликовано: 03.05.2015

Есть такое задание: пользователь выбирает папку, из которой нужно просмотреть картинки. Эти картинки добавляются в ЛистБокс. Я знаю, как из папки считать картинки в List, но я не знаю, как динамически добавить картинки в ListItem. Подскажите варианты, пожалуйста!

Код XAML:

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto"></RowDefinition>
        <RowDefinition></RowDefinition>
    </Grid.RowDefinitions>
    <Menu Grid.Row="0" HorizontalAlignment="Left" VerticalAlignment="Center">
        <MenuItem Header="Open" Width="50" Click="MenuItem_Click" FlowDirection="LeftToRight"/>
    </Menu>
    <ListBox Name="ListBox1" Grid.Row="1" Background="Yellow">            
    </ListBox>
</Grid>

Код C#:

public partial class MainWindow : Window
{
    IList<Bitmap> images = new List<Bitmap>();        

    public MainWindow()
    {
        InitializeComponent();
    }

    private void MenuItem_Click(object sender, RoutedEventArgs e)
    {
        var dialog = new System.Windows.Forms.FolderBrowserDialog();
        System.Windows.Forms.DialogResult result = dialog.ShowDialog();            

        if (result == System.Windows.Forms.DialogResult.OK)
        {
            foreach (string file in Directory.GetFiles(dialog.SelectedPath))
            {
                images.Add(new Bitmap(file));

                // ListBox1.Items.Add() // не знаю, как добавить Image
            }
        }
    }
}

Ответы

▲ 1

Изменение первое:

IList<System.Windows.Controls.Image> images = new List<System.Windows.Controls.Image>();

Изменение второе:

private List<string> filter = new List<string>() { @"bmp", @"jpg", @"gif", @"png" };
private void MenuItem_Click(object sender, RoutedEventArgs e)
{
       var dialog = new System.Windows.Forms.FolderBrowserDialog();
       System.Windows.Forms.DialogResult result = dialog.ShowDialog();

       if (result == System.Windows.Forms.DialogResult.OK)
       {
           foreach (string file in Directory.GetFiles(dialog.SelectedPath))
            {
                if (filter.Exists(n => n == file.Split(new char[] { '.' }).Last().ToLower()))
                {
                    try
                    {
                        var bi = new BitmapImage(new Uri(file));
                        var img = new System.Windows.Controls.Image();
                        img.Source = bi;
                        images.Add(img);
                     }
                     catch (Exception ex)
                     {
                         MessageBox.Show(ex.Message);
                     }                        
                }
            }
            ListBox1.ItemsSource = images;
        }
}

Подходит пожалуй только как пример, правильным будет, написание модели которая выдает на ваши запросы ObcervableCollection, а всю необходимую обработку хранит внутри.