Hemen hemen bütün Windows uygulamalarında bir dosyayı kaydetmek yada bir dosyayı açmak için aynı diyalog penceresi karşımıza çıkar. Bunun nedeni bu diyalog penceresinin Windows API parçası olmasıdır. Bu bu apiyi API’yi kullanarak dosya açma yada kaydetme işlemini yapmak için Microsoft.Win32 isim alanının projeye dahil edilmesi gerekiyor.
Uyglamada Microsoft.Win32 isim alanını ekleyip, ekrandaki bir buton ile çektiğimiz resimleri ekranda listeleme uygulaması yapacağız. Uygulama için bir tane button(x:Name=”button” ) ,bir tane liste kutusu (x:Name=”listBox”) ve bir tane de resim(x:Name=”image”) kutusu ekliyor.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="150"></ColumnDefinition> <ColumnDefinition Width="*"></ColumnDefinition> </Grid.ColumnDefinitions> <Grid.RowDefinitions> <RowDefinition Height="50"></RowDefinition> <RowDefinition Height="*"></RowDefinition> </Grid.RowDefinitions> <Button x:Name="button" Margin="5" Grid.Column="0" Grid.Row="0" Content="Resim Aç" /> <ListBox x:Name="listBox" Margin="5" Grid.Column="0" Grid.Row="1" /> <Image x:Name="image" Margin="5" Grid.Column="1" Grid.Row="0" Grid.RowSpan="2"/> </Grid> |
Örnek 1:
Resim Aç butonunun (button click) tıklama olayına OpenFileDialog örneklemesi yapıp sırasıyla resim seçmek için filtre, seçilen dosyanın kontrolü ve çoklu dosya seçim aktif ettikten sonra, dialog ile seçilen nesnelerin tam adlarını foreach ile liste kutusuna ekliyoruz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
OpenFileDialog dialog = new OpenFileDialog(); dialog.Filter = "Image Files(*.BMP;*.JPG;*.GIF)|*.BMP;*.JPG;*.GIF" + "|All files (*.*)|*.*"; //filitreleme dialog.CheckFileExists = true; //dosya kontrol dialog.Multiselect = true; //çoklu seçim if (dialog.ShowDialog() == true) //dialog açıldıktan sonra { listBox.Items.Clear(); //liste kutunusu boşalt foreach (string file in dialog.FileNames) //seçilen dosyaları tek tek oku { listBox.Items.Add(file); //dosya adı ve yolunu listeye ekle } } |
Listbox SelectionChanged olayı gerçekleştiğinde ise Listbox içindeki uri bilgisini resim yolu olarak veriyoruz.
1 2 3 4 |
ListBox list = (ListBox)sender; image.Source = new BitmapImage(new Uri(list.SelectedItem.ToString())); |
yada
1 2 3 |
image.Source = new BitmapImage(new Uri(listBox.SelectedItem.ToString())); |
Yukarıda dikkat edilmesi gereken image nesnesinin source değerinin bir bitmap nesnesi olması, bitmap nesnesnin oluştururken de mevcut bir Uri ile yol okunuyor.
Örnek 2:
Yukarıdaki örneği biraz değiştirip liste içine resmi getirelim. Listedeki görünen küçük resme tıklandığında da büyük resmi resim panelinde gösterelim.
(button click)
foreach içinde örnek bir Image nesnesi oluşturduktan sonra resim kaynağını seçilen dosya olarak ayarlayıp listeye ekliyoruz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
OpenFileDialog dialog = new OpenFileDialog(); dialog.Filter = "Image Files(*.BMP;*.JPG;*.GIF)|*.BMP;*.JPG;*.GIF" + "|All files (*.*)|*.*"; //filitreleme dialog.CheckFileExists = true; //dosya kontrol dialog.Multiselect = true; //çoklu seçim if (dialog.ShowDialog() == true) //dialog açıldıktan sonra { listBox.Items.Clear(); //liste kutunusu boşalt foreach (string file in dialog.FileNames) //seçilen dosyaları tek tek oku { Image resim = new Image(); resim.Source = new BitmapImage(new Uri(file)); listBox.Items.Add(resim); //dosya adı ve yolunu listeye ekle resim.Width = 100; } } |
( listBox SelectionChanged )
Liste içinde seçilen ilgili resim nesnesini alıp, yolunu image nesnesine kaynak olarak veriyoruz.
1 2 3 4 |
Image aktifResim=(Image)listBox.SelectedItem; image.Source = new BitmapImage(new Uri(aktifResim.Source.ToString())); |