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.