2016-01-01 4 views
0

Я хочу дать folder path и с этого пути к папке, если это folder contains 3 images я хочу display those 3 images в StackPanel WPF FormКак добавить несколько изображений в StackPanel WPF из папки?

Я пытался что-то, как показано ниже, который прекрасно работает для одного изображения, но, как можно загрузить все изображения из указанной папки?

<Window x:Class="wpfBug.Window1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="Window1" Height="300" Width="300" Loaded="Window_Loaded"> 
    <StackPanel Name="sp"> 
    </StackPanel> 
</Window> 



private void Window_Loaded(object sender, RoutedEventArgs e) 
     { 
      Image i = new Image(); 
      BitmapImage src = new BitmapImage(); 
      src.BeginInit(); 
      src.UriSource = new Uri("mypic.png", UriKind.Relative); 
      // how to load all images from given folder? 
      src.EndInit(); 
      i.Source = src; 
      i.Stretch = Stretch.Uniform; 
      //int q = src.PixelHeight;  // Image loads here 
      sp.Children.Add(i); 
     } 

ответ

2

Вы должны использовать ItemsControl, как показано ниже. Он использует вертикальную StackPanel в качестве панели по умолчанию для своих элементов.

<ItemsControl x:Name="imageItems"> 
    <ItemsControl.ItemTemplate> 
     <DataTemplate> 
      <Image Source="{Binding}" Margin="5"/> 
     </DataTemplate> 
    </ItemsControl.ItemTemplate> 
</ItemsControl> 

Установите ItemsSource в ItemsControl так:

imageItems.ItemsSource = Directory.EnumerateFiles(FOLDERPATH, "*.png"); 

Преобразование из строки пути к ImageSource выполняется с помощью встроенного преобразования типа в WPF.


Вы можете использовать различные ItemsPanel так:

<ItemsControl ...> 
    <ItemsControl.ItemsPanel> 
     <ItemsPanelTemplate> 
      <StackPanel Orientation="Horizontal"/> 
     </ItemsPanelTemplate> 
    </ItemsControl.ItemsPanel> 
    ... 
</ItemsControl> 
+0

Я думаю, что все изображения loasing друг на друга :( , как я могу сделать пространство между двумя изображениями – Neo

+1

Установите их свойство Margin? – Clemens

+0

пока отображается только одно изображение: O странно, что я написал 'imageItems.ItemsSource = Directory.EnumerateFiles (FOLDERPATH," * .png ");' on' Window_Loaded' – Neo