ПРОГРАММИРОВАНИЕ28 августа

Диалоги в WPF C#. Работа с файловой системой. Библиотека Оokii Dialogs WPF.

Если вам необходимо в WPF работать с файловой системой с использованием диалоговых окон, то самый простой и наименее затратный способ - это использовать сторонние библиотеки.

Конечно, если у вас есть желание, а  главное – знания, чтобы написать свои дмалоговые окна (файловый браузер), полностью ложащиеся а паттерн MVVM, то, конечно, можете заморочиться и написать реализацию.

Для новичков все же проще пойти по пути использования сторонних библиотек.

Первая библиотека, позволяющая без проблем работать с файловой системой - это библиотека Оokii Dialogs Wpf.

 

Ссылки на ресурсы по Оokii Dialogs WPF

Ссылка на пакет WPF Nuget

Cсылка на GitHub

Ссылка на исходный код 

Ссылка на документацию 

Ссылка на примеры кода

Ссылка на примеры кода

 

Реализация Оokii Dialogs WPF

Перед началом работы необходимо установить пакет из Nuget Install-Package Ookii.Dialogs.Wpf  – Ookii.Dialogs.Wpf

Для удобства все реализации будем делать в файле MainWindow.xaml.cs в методах, привязанных к кнопкам реализованным в MainWindow.xam

Для работы с папками необходимо создать объект класса  VistaFolderBrowserDialog

Для работы с файлами необходимо создать объект класса VistaOpenFileDialog Class

 

Пример кода реализации библиотеки  Оokii Dialogs WPF для работы с файловой системой

 

MainWindow.xaml.cs

using System;

using System.Windows;

using Ookii.Dialogs.Wpf;

namespace ОokiiDialogsWPF

{

    public partial class MainWindow : Window

    {

        public MainWindow()

        {

            InitializeComponent();

        }

        #region Выбор папок: Одна

        private void SelectOneFolder()

        {

            var dialog = new VistaFolderBrowserDialog();

            dialog.Description = "Please select a folder.";

            dialog.UseDescriptionForTitle = true; // This applies to the Vista style dialog only, not the old dialog.

            dialog.Multiselect = false; // Выбор одной папки - надо false

            if ((bool)dialog.ShowDialog(this))

            {

                MessageBox.Show(this, $"Выбрана папка:{Environment.NewLine}{dialog.SelectedPath}" "Пример выбора одной папки");

            }

        }

        #endregion

        #region Выбор папок: Несколько

        private void SelectAnyFolder()

        {

            string[] result = null;

            var dlg = new VistaFolderBrowserDialog();

            dlg.Description = "Please select a folder.";

            dlg.UseDescriptionForTitle = true; // This applies to the Vista style dialog only, not the old dialog.

            dlg.Multiselect = true; // Выбор нескольких папок

            if ((bool)dlg.ShowDialog(this))

            {

                result = dlg.SelectedPaths;

                foreach (var item in result)

                {

                    MessageBox.Show(this, $"Выбрана папка:{Environment.NewLine}{item}""Пример выбора нескольких папок");

                }

            }

        }

  #endregion

   #region Выбор файлов: Один

        private void SelectOneFile()

        {

            var dialog = new VistaOpenFileDialog();

            dialog.Filter = "Txt file (*.txt) | *.txt";

            dialog.Multiselect = false; // Выбор одной папки - надо false

            if ((bool)dialog.ShowDialog(this))

            {

                MessageBox.Show(this, $"Выбран файл:{Environment.NewLine}{dialog.FileName}",  "Пример выбора одного файла");

            }

        }

        #endregion

        #region Выбор файлов: Несколько

        private void SelectAnyFile()

        {

            string[] result = null;

            var dialog = new VistaOpenFileDialog();

            dialog.Filter = "Txt file (*.txt) | *.txt";

            dialog.Multiselect = true; // Выбор одной папки - надо false

            dialog.Title = "!!!!!!!!";

            if ((bool)dialog.ShowDialog(this))

            {

                result = dialog.FileNames;

                foreach (var item in result)

                {

                    MessageBox.Show(this, $"Выбраны файлы:{Environment.NewLine}{item}",

                        "Пример выбора нескольких ФАЙЛОВ");

                }

            }

        }

        #endregion

/* Реализация кнопок*/

        private void ButtonBase_OnClick_SelectOneFolder(object sender, RoutedEventArgs e)        {            SelectOneFolder();        }

        private void ButtonBase_OnClick_SelectAnyFolder(object sender, RoutedEventArgs e)        {            SelectAnyFolder();        }

        private void ButtonBase_OnClick_SelectOneFile(object sender, RoutedEventArgs e)        {            SelectOneFile();        }

        private void ButtonBase_OnClick_SelectAnyFile(object sender, RoutedEventArgs e)        {            SelectAnyFile();        }

    }

}

 

MainWindow.xaml

<Window

    x:Class="ОokiiDialogsWPF.MainWindow"

    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"

    xmlns:local="clr-namespace:ОokiiDialogsWPF"

    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"

    Title="Оokii Dialogs WPF"

    Width="800"

    Height="450"

    mc:Ignorable="d">

    <Grid>

        <Grid.ColumnDefinitions>

            <ColumnDefinition Width="Auto" />

            <ColumnDefinition Width="*" />

        </Grid.ColumnDefinitions>

        <Grid Grid.Column="0" Margin="5">

            <StackPanel Margin="5" Orientation="Vertical">

                <Button

                    Width="200"

                    Height="30"

                    Margin="2"

                    Click="ButtonBase_OnClick_SelectOneFolder"

                    Content="Выбор одной папки" />

                <Button

                    Width="200"

                    Height="30"

                    Margin="2"

                    Click="ButtonBase_OnClick_SelectAnyFolder"

                    Content="Выбор НЕСКОЛЬКИХ  папок" />

                <Button

                    Width="200"

                    Height="30"

                    Margin="2"

                    Click="ButtonBase_OnClick_SelectOneFile"

                    Content="Выбор ОДНОГО файла" />

                <Button

                    Width="200"

                    Height="30"

                    Margin="2"

                    Click="ButtonBase_OnClick_SelectAnyFile"

                    Content="Выбор НЕСКОЛЬКИХ файлов" />

            </StackPanel>

        </Grid>

        <Grid Grid.Column="1" Margin="5" />

    </Grid>

</Window>

Ссылки на статьи

Делегат в Си Шарп

Диалог в WPF C#. Работа с файловой системой. Библиотека Оokii Dialogs WPF

Работа с файловой системой

Библиотека Оokii Dialogs WPF

MVVM - просто о сложном. Пример на C#

MVVM и внедрение зависимостей Часть 1

MVVM и внедрение зависимостей Часть 2

Комментарии

Добавить комментарий:

Отметьте что вы не робот

Вернуться наверх