Файловые диалоговые окна

Последнее обновление: 24.02.2016

На Universal Windows Platform для работы с файлами мы можем использовать специальные диалоговые окна. В каких ситуациях они могут быть нам полезны? Прежде всего когда речь идет об открытии или сохранении файла, и нам нужен простой и понятный визуальный компонент для выбора места файла на устройстве.

Для сохранения файла применяется компонент Windows.Storage.Pickers.FileSavePicker, а для открытия файла .

Для работы с файловыми диалогами определим следующую разметку XAML:

<Page
    x:Class="FoldersApp.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:FoldersApp"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d">
    <Page.BottomAppBar>
        <CommandBar>
            <AppBarButton x:Name="saveButton" Label="Сохранить" Icon="Save" Click="saveButton_Click" />
            <AppBarButton x:Name="openButton" Label="Открыть" Icon="OpenFile" Click="openButton_Click" />
        </CommandBar>
    </Page.BottomAppBar>
    <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
        <TextBox x:Name="myTextBox" VerticalAlignment="Stretch" TextWrapping="Wrap"  />
    </Grid>
</Page>

Здесь определены две кнопки на нижней панели, для которых в файле кода C# пропишем обработчики:

using System;
using System.Collections.Generic;
using Windows.Storage;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.Storage.Pickers;

namespace FoldersApp
{
    public sealed partial class MainPage : Page
    {
        public MainPage()
        {
            this.InitializeComponent();
        }

        private async void saveButton_Click(object sender, RoutedEventArgs e)
        {
            var savePicker = new FileSavePicker();
            // место для сохранения по умолчанию
            savePicker.SuggestedStartLocation = PickerLocationId.DocumentsLibrary;
            // устанавливаем типы файлов для сохранения
            savePicker.FileTypeChoices.Add("Plain Text", new List<string>() { ".txt" });
            // устанавливаем имя нового файла по умолчанию
            savePicker.SuggestedFileName = "New Document";
            savePicker.CommitButtonText = "Сохранить";

            var new_file = await savePicker.PickSaveFileAsync();
            if (new_file != null)
            {
                await FileIO.WriteTextAsync(new_file, myTextBox.Text);
            }
        }

        private async void openButton_Click(object sender, RoutedEventArgs e)
        {
            FileOpenPicker openPicker = new FileOpenPicker();
            openPicker.ViewMode = PickerViewMode.Thumbnail;
            openPicker.SuggestedStartLocation = PickerLocationId.Desktop;
            openPicker.CommitButtonText = "Открыть";
            openPicker.FileTypeFilter.Add(".txt");
            var file = await openPicker.PickSingleFileAsync();

            if (file != null)
            {
                myTextBox.Text = await FileIO.ReadTextAsync(file);
            }
        }
    }
}
Диалоговые окна в Universal Windows Platform

FileOpenPicker и FileSavePicker имеют похожий набор свойств, которые позволяют кастомизировать диалоговые окна:

  • SuggestedStartLocation: указывает на каталог по умолчанию, который будет открываться в диалоговом окне. В качестве значения можно указать одну из констант перечисления PickerLocationId. Например, каталог Документы - PickerLocationId.DocumentsLibrary

  • SuggestedFileName: устанавливает имя файла по умолчанию

  • CommitButtonText: устанавливает текст кнопки, которая и выполняет действие сохранения или открытия

  • DefaultFileExtension: расширение файла, которое будет добавляться к имени файла при сохранении, если другого расширения не будет указано (только для FileSavePicker)

  • FileTypeChoices: объект IDictionary, который содержит расширения файлов и их описания (только для FileSavePicker)

  • FileTypeFilter: объект List, который содержит список доступных расширений файлов (только для FileOpenPicker)

  • ViewMode: формат отображения списка файлов в диалоговом окне при их открытии (только для FileOpenPicker). Принимает одну из двух констант: PickerViewMode.Thumbnail (отображение файлов в виде значков) и PickerViewMode.List (отображение файлов в виде списка)

При сохранении файла мы получаем указанное имя файла с расширением с помощью метода PickSaveFileAsync():

var new_file = await savePicker.PickSaveFileAsync();

Этот метод возвращает объект StorageFile, получив который, мы можем сохранять в него различное содержимое.

При открытии файла мы получаем выбранный файл с помощью метода PickSingleFileAsync():

var new_file = await savePicker.PickSaveFileAsync();

Этот метод также возвращает объект StorageFile, который представляет выбранный файл.

При этом надо подчеркнуть, что сохранение или открытие файла через диалоговые компоненты будет работать как на десктопах, так и на мобильных устройствах, только на смартфонах диалоговый компонент будет представлять последовательность экранов, на которых нам надо выбрать файл. Например, открытие файла для того же приложения на смартфоне проходит следующие экраны:

Открытие файла на Windows 10 Mobile
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850