This article has been localized into German by the community.
Der SaveFileDialog
Der SaveFileDialog gibt dem Benutzer die Möglichkeit, einen Speicherort und einen Namen für eine Datei auszuwählen. Er darf nicht mit dem OpenFileDialog verwechselt werden, welchen wir in dem vorherigen Artikel vorgestellt haben. Diese beiden Dialoge sind nichts weiteres als ein Rahmen um den Standard-Windows Dialog.
Einfacher SaveFileDialog
Wir beginnen mit einem einfachen Beispiel für ein 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);
}
}
}
Wie man sehen kann, geht es hauptsächlich darum, den SaveFileDialog zu instanziieren und dann die ShowDialog() Methode aufzurufen. Wenn der Dialog true zurückgibt verwenden wir die FileName Eigenschaft (welche den ausgewählten Pfad, sowie den eingegebenen Dateinamen beinhaltet) als Pfad um unseren Inhalt zu schreiben.
Wenn man den Save Button klickt, sollte man - je nach Windows Version - einen Dialog wie diesen sehen:
Filter
Wie man im ersten Beispiel sehen kann, habe ich manuell eine .txt Endung an meinen gewünschten Dateinamen angehängt - hauptsächlich weil die "Save as type" ComboBox leer ist. Genau wir beim OpenFileDialog wird die Box durch die Filter Eigenschaft gesteuert und wird hier genau so verwendet.
saveFileDialog.Filter = "Text file (*.txt)|*.txt|C# file (*.cs)|*.cs";
Mehr Details über das Format der Filter Eigenschaft gibt es im vorherigen Artikel über den OpenFileDialog.
Mit einem Filter wie dem Obenstehenden sieht der SaveFileDialog wie folgt aus:
Jetzt kann man den Dateinamen ohne die Endung eingeben. Diese wird vom angegebenen Dateityp in der ComboBox genommen. Das zeigt dem Benutzer außerdem welche Dateiformate die Anwendung unterstützt, was sehr wichtig ist.
Setzen des Standardverzeichnis
Das Standardverzeichnis des SaveFileDialog wird von Windows bestimmt, kann aber mit der InitialDirectory Eigenschaft angepasst werden. Normalerweise setzt man diesen Wert auf ein Benutzerabhängiges-, das Anwendungs- oder das letzt verwendete Verzeichnis. Der Pfad wird in folgendem Format angegeben:
saveFileDialog.InitialDirectory = @"c:\temp\";
Wenn man ein spezielles Verzeichnis von Windows verwenden möchte, wie zum Beispiel den Desktop, "Meine Dokumente" oder das Programmverzeichnis muss man besonders aufpassen, da diese je nach Windowsversion und angemeldetem Benutzer unterschiedlich sein können. Das .NET Framework kann hier jedoch helfen indem man die Environment Klasse und dessen Eigenschaften verwendet:
saveFileDialog.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
In diesem Fall hole ich den Pfad für das "Meine Dokumente" Verzeichnis. Die SpecialFolder Eigenschaft hat eine Menge interessanter Pfade. Die vollständige Liste findet man in einem MSDN Artikel.
Optionen
Neben den bereits erwähnten Optionen in diesem Artikel gibt es noch folgende Eigenschaften die bei der Gestaltung des SaveFileDialogs helfen:
AddExtension - ist standardmäßig true und bestimmt ob der SaveFileDialog automatisch eine Endung an den Dateinamen anhängen soll, wenn der Benutzer es vergisst. Sofern möglich basiert die Endung auf dem ausgewählten Filter. Andernfalls wird die DefaultExt verwendet, sofern sie spezifiziert ist. Wenn man seiner Anwendung ermöglichen möchte Dateinamen ohne Endung abzuspeichern, muss dies deaktiviert werden.
OverwritePrompt - ist standardmäßig true und bestimmt ob der SaveFileDialog nach einer Bestätigung des Benutzers fragen soll, wenn eine Datei mit dem angegeben Namen bereits vorhanden ist. Normalerweise sollte man diese Option eingeschaltet lassen.
Title - hiermit kann der Titel des Dialogs angepasst werden. Standardmäßig ist dieser "Save As" oder das sprachabhängige Äquivalent. Diese Eigenschaft gibt es auch beim OpenFileDialog.
ValidateNames - ist standardmäßig true und sorgt dafür, dass der Benutzer einen gültigen Dateinamen eingibt.