TOC

This article has been localized into Russian by the community.

Диалоговые окна:

SaveFileDialog

SaveFileDialog может помочь Вам при выборе локализации и названия файла, который необходимо сохранить. Это диалоговое окно работает (и выглядит) практически также, как OpenFileDialog, который мы использовали в предыдущей главе, но с некоторыми отличиями. Так же как и OpenFileDialog, SaveFileDialog - это обертка стандартного диалогового окна Windows (что может значить, что пользователи Вашего приложения увидят окно, которое они наверняка уже видели, например в Блокноте).

Простой пример окна SaveFileDialog

Давайте отбросим лишнее и начнем с простейшего примера использования SaveFileDialog:

<Window x:Class="WpfTutorialSamples.Dialogs.SaveFileDialogSample"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="SaveFileDialogSample" Height="300" Width="300">
    <DockPanel Margin="10">
        <WrapPanel HorizontalAlignment="Center" DockPanel.Dock="Top" Margin="0,0,0,10">
            <Button Name="btnSaveFile" Click="btnSaveFile_Click">Save file</Button>
        </WrapPanel>
        <TextBox Name="txtEditor" TextWrapping="Wrap" AcceptsReturn="True" ScrollViewer.VerticalScrollBarVisibility="Auto" />
    </DockPanel>
</Window>
using System;
using System.IO;
using System.Windows;
using Microsoft.Win32;

namespace WpfTutorialSamples.Dialogs
{
	public partial class SaveFileDialogSample : Window
	{
		public SaveFileDialogSample()
		{
			InitializeComponent();
		}

		private void btnSaveFile_Click(object sender, RoutedEventArgs e)
		{
			SaveFileDialog saveFileDialog = new SaveFileDialog();
			if(saveFileDialog.ShowDialog() == true)
				File.WriteAllText(saveFileDialog.FileName, txtEditor.Text);
		}
	}
}

Как Вы могли заметить, здесь мы инициализировали SaveFileDialog, а затем вызвали метод ShowDialog(). При возвращает true мы используем свойство FileName (которое будет содержать выбранный путь и имя файла, введенные пользователем), как путь к файлу, в который мы хотим записать данные.

Если Вы нажмете на кнопку "Save file", то увидите диалоговое окно (может быть разным, в зависимости от версии Windows).

Фильтрация

Как Вы могли заметить из первого примера, я "вручную" добавил расширение .txt к желаемому названию файла, так как, на данный момент, выпадающий список с расширениями "Save as type" пуст (см. скриншот). Так же как и для OpenFileDialog, этот список контролируется с помощью свойства Filter, которое в использование является таким же.

saveFileDialog.Filter = "Text file (*.txt)|*.txt|C# file (*.cs)|*.cs";

Подробности работы свойства Filter Вы можете найти в предыдущей главе OpenFileDialog, в которой мы посвятили время этому механизму.

С фильтром, определенным выше, конечный результат SaveFileDialog будет выглядеть вот так:

В этом окне Вы можете ввести название файла без специального расширеня (оно может быть выбрано из выпадающего списка). Так же этот список показывает пользователю - какие форматы файлов поддерживает приложение, что конечно же, крайне важно.

Определение каталога по умолчанию

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

saveFileDialog.InitialDirectory = @"c:\temp\";

Если Вы хотите использовать специализированные каталоги Windows, такие как: Рабочий стол, Мои документы либо Program File, то следует осуществлять это крайне осторожно, так как путь к этим каталогам может меняться в зависимости от версии Windows либо от того, какой пользователь вошел в систему. Фреймворк .NET может помочь Вам с этим, для этих целей существует класс Environment, в котором уже описаны подобные каталоги:

saveFileDialog.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);

В данном примере я получил путь к папке "Мои документы", но обратите внимание на перечисление SpecialFolder - оно содержит много интересных путей к папкам. При необходимости, полный список путей можно найти в этой статье MSDN.

Опции

Кроме опций, рассмотренных в данной главе руководства, советую Вам уделить внимание следующим, которые помогут Вам адаптировать диалоговое окно SaveFileDialog под выставленные требования:

AddExtension - по умолчанию true и определяет, должен ли SaveFileDialog автоматически добавлять расширение к названию файла, в случае когда пользователь не сделал этого. Это расширение будет основано на выбранном фильтре, а если это будет невозможно, будет выбрано расширение по умолчанию DefaultExt (если оно определено, конечно). Если Вам необходимо, чтобы приложение сохраняло файлы без расширения - просто выключите данное рассматриваемое свойство.

OverwritePrompt - по умолчанию true, определяет должен ли SaveFileDialog уточнять у пользователя о перезаписи файла, если название выбранное пользователем совпадает с названием уже существующего файла. Обычно, Вы будете оставлять эту опцию включенной за исключением особых ситуаций.

Title - Вы можете переопределить это свойство своим личным, для того чтобы выбрать заголовок диалогового окна. По умолчанию заголовок такой: "Save As" (либо адаптированный под региональные настройки). Так же, это свойство можно использовать и для OpenFileDialog.

ValidateNames - по умолчанию true, и если его не отключить, то SaveFileDialog будет все время проверять вводимые пользователем названия файлов на валидность в рамках Windows.

This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!