This article has been localized into Ukrainian by the community.
Далогове вікно для збереження файлів
SaveFileDialog (діалогове вікно для збереження файлів) дозволяє місце та назву для файлу, який ви хочете зберегти. Він схожий на 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 (вона містить вибраний шлях та назву файлу, введену користувачем) в якості шляху до файлу, в який ми запишемо певний вміст.
Якщо ви натиснете кнопку для збереження, то побачите подібне діалогове вікно. Воно буде відрізнятися в залежності від версії Windows:
Фільтер
Як ви бачите, у першому прикладі я вручну додав розширення .txt до імені файлу, оскільки список "Save as type" - попрожній. Як і в OpenFileDialog, цей список формується на основі властивості Filter. і використовується таким самим чином.
saveFileDialog.Filter = "Text file (*.txt)|*.txt|C# file (*.cs)|*.cs";
Щоб дізнатися більше про властивість Filter, будь ласка, перегляньте статтю "Діалогове вікно для відкриття файлів".
При використанні фільтру, показаного в коді вище, SaveFileDialog виглядатиме ось так:
Завдяки фільтру ви можете записувати імена файлів, не вказуючи розширення. Замість цього тип файлу можна вибрати у відповідному списку. Крім того таким чином застосунок повідомляє користувачу про допустимі формати даних.
Встановлення початкової папки
Початкову папку SaveFileDialog вибирає Windows, однак цю поведінку можна перевантажити, використавши властивість InitialDirectory. Зазвичай ви використовуватимете папку, вибрану користувачем, папку застосунку або можливо останню використану папку. Шлях можна задати в форматі рядка, як тут:
saveFileDialog.InitialDirectory = @"c:\temp\";
Якщо ви хочете використати одну зі спеціальних папок Windows, наприклад: Робочий стіл, Документи чи Файли програм, то задати шлях вручну де вдастся, оскільки вын залежить від версії Windows та поточного користувача. На щастя, .NET framework може вам допомогти: скористайтеся класом Environment та його членами:
saveFileDialog.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
В цьому прикладі я отримав шлях до папки Документи. Всі інші значення переліку SpecialFolder можна дізнатися в цій статті з офіційної документації Microsoft.
Налаштування
Окрім вже згаданих у цій статті налаштувань є ще деякі, на які я хочу звернути вашу увагу. Вони допоможуть вам гнучкіше налаштовувати SaveFileDialog:
AddExtension визначає чи повинен SaveFileDialog автоматично додавати розширення до назви файлу, якщо воно не вказане. За умовчуванням має значення True. Розширення визначається на основі фільтру, якщо ж це не можливо, то воно береться зі значення властивості DefaultExt (якщо воно вибране). Якщо вам потрібно, щоб ваш застосунок міг зберігати файли без розширення, то вимкніть цю властивість.
OverwritePrompt визначає чи буде SaveFileDialog повідомляти користувача про те, що вибраний ним файл вже існує. За умовчуавнням має значення True. Ситуації, в яких слід вимкнути цю властивість, виникають не часто.
Title — ви можете змінити цю властивість, якщо хочете встановити власну назву діалогового вікна. За замовчуванням властивість має значення «Зберегти як», або інший локалізований еквівалент. Ця властивість також є дійсною і для OpenFileDialog.
ValidateNames визначає чи може користвач використовувати лише допустимі у Windows імена файлів. За умовчуванням, має значення True.