C# WPF

WPF OpenFileDialog Kullanımı

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.

    <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.

            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.

            ListBox list = (ListBox)sender;
            image.Source = new BitmapImage(new Uri(list.SelectedItem.ToString()));

yada

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.

            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.

           Image aktifResim=(Image)listBox.SelectedItem;
           image.Source = new BitmapImage(new Uri(aktifResim.Source.ToString()));

 

 

 

 

 

Yorum Yap