This article has been localized into Czech by the community.
SaveFileDialog
SaveFileDialog vám pomůže vybrat umístění a název souboru, když chcete soubor uložit. Funguje a vypadá velmi podobně jako OpenFileDialog, který jsme použili v předchozím článku, s několika jemnými rozdíly. Stejně jako OpenFileDialog, SaveFileDialog je obalem kolem běžného dialogu Windows, což znamená, že vaši uživatelé uvidí přibližně stejný dialog, ať ho spustí ve vaší aplikaci nebo například v poznámkovém bloku.
SaveFileDialog jednoduchý příklad
Začněme velmi jednoduchým příkladem použití SaveFileDialogu:
<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);
}
}
}
Jak vidíte, jedná se převážně o vytvoření instance SaveFileDialog a poté volání metody ShowDialog(). Pokud vrátí true, použijeme vlastnost FileName (která bude obsahovat vybranou cestu i název souboru zadaný uživatelem), jako cestu, kam zapíšeme naše obsahy.
Pokud kliknete na tlačítko uložit, měli byste vidět dialog jako tento, v závislosti na verzi Windows, kterou používáte:
Filtr
Jak vidíte z prvního příkladu, ručně jsem přidal příponu .txt k mému požadovanému názvu souboru, hlavně proto, že rozevírací seznam "Uložit jako typ" je prázdný. Stejně jako u OpenFileDialog, tento seznam je řízen prostřednictvím vlastnosti Filter, a je také používán přesně stejným způsobem.
saveFileDialog.Filter = "Text file (*.txt)|*.txt|C# file (*.cs)|*.cs";
Pro více detailů o formátu vlastnosti Filter se prosím podívejte na předchozí článek o OpenFileDialog, kde je to vysvětleno detailně.
S filtrem, specifikovaném výše, bude vypadat výsledný SaveFileDialog takto:
S tímto nastavením můžete psát názvy souborů bez určení přípony - místo toho bude převzata z vybraného typu souboru v rozevíracím seznamu filtru. To také uživatelům naznačuje, které formáty souborů vaše aplikace podporuje, což je samozřejmě důležité.
Nastavení počáteční složky
O počáteční složce použité SaveFileDialogem rozhodují Windows, ale použitím vlastnosti InitialDirectory to můžete přepsat. Tuto hodnotu obvykle nastavíte na složku určenou uživatelem, tedy složku aplikace nebo možná jen na složku, která byla naposledy použita. Můžete ji nastavit na cestu ve formátu řetězce, takto:
saveFileDialog.InitialDirectory = @"c:\temp\";
Pokud chcete použít jednu ze speciálních složek ve Windows, např. Plochu, Dokumenty nebo adresář Program Files, musíte být opatrní, protože ty se mohou lišit v každé verzi Windows a také závisí na tom, který uživatel je přihlášen. .NET framework vám však může pomoci, stačí použít třídu Environment a její členy pro práci se speciálními složkami:
saveFileDialog.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
V tomto případě získávám cestu pro složku Dokumenty, ale podívejte se na výčet SpecialFolder - obsahuje hodnoty pro mnoho zajímavých cest. Pro úplný seznam si prosím přečtěte tento článek MSDN.
Možnosti
Kromě možností, které byly již zmíněny v tomto článku, chci upozornit na následující vlastnosti, které vám pomohou přizpůsobit SaveFileDialog vašim potřebám:
AddExtension - ve výchozím nastavení je true a určuje, zda by SaveFileDialog měl automaticky přidat příponu k názvu souboru, pokud ji uživatel vynechá. Přípona bude založena na vybraném filtru, pokud to není možné, pak se vrátí zpět k vlastnosti DefaultExt (pokud je specifikována). Pokud chcete, aby vaše aplikace mohla ukládat soubory bez přípon, možná budete muset tuto možnost zakázat.
OverwritePrompt - ve výchozím nastavení je true a určuje, zda by SaveFileDialog měl požádat o potvrzení, pokud uživatel zadá název souboru, který povede k přepsání existujícího souboru. Tuto možnost obvykle budete chtít ponechat povolenou, kromě velmi speciálních situací.
Title - Tuto vlastnost můžete přepsat, pokud chcete v dialogu vlastní název. Ve výchozím nastavení je "Uložit jako" nebo lokalizovaný ekvivalent a vlastnost je také platná pro OpenFileDialog.
ValidateNames - ve výchozím nastavení je true a pokud není zakázáno, zajistí se, že uživatel zadá pouze platné názvy souborů Windows, než je mu umožněno pokračovat.