TOC

This article has been localized into Chinese by the community.

对话框:

保存文件对话框

当您希望保存文件时,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属性(它将包含所选路径以及用户输入的文件名)作为将内容写入的路径。

如果单击“保存”按钮,则会看到这样的对话框,具体取决于您使用的Windows版本:

过滤

从第一个示例中可以看出,我手动将.txt扩展名添加到我想要的文件名,主要是因为“另存为类型”组合框为空。就像OpenFileDialog一样,这个框是通过Filter属性控制的,它也以完全相同的方式使用。

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

有关Filter属性格式的更多详细信息,请参阅OpenFileDialog上的上一篇文章,其中详细介绍了该文章。

使用上面的过滤器,生成的SaveFileDialog将如下所示:

有了这个,您可以在不指定扩展名的情况下编写文件名 - 它将取自过滤器组合框中的选定文件类型。这也向用户表明您的应用程序支持哪种文件格式,这当然很重要。

设置初始目录

SaveFileDialog使用的初始目录由Windows决定,但通过使用InitialDirectory 属性,您可以覆盖它。您通常会将此值设置为用户指定的目录,应用程序目录或者可能只是上次使用的目录。您可以将其设置为字符串格式的路径,如下所示:

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

如果要在Windows上使用某个特殊文件夹,例如在桌面,我的文档或程序文件目录中,您必须特别小心,因为这些可能因Windows的每个版本而异,也取决于登录的用户。但.NET框架可以帮助您,只需使用环境用于处理特殊文件夹的类及其成员:

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

在这种情况下,我获取了My Documents文件夹的路径,但是看看了SpecialFolder枚举 - 它包含许多有趣路径的值。有关完整列表,请参阅此内容MSDN article.

选项

除了本文中已经提到的选项之外,我还想提请您注意以下属性,这些属性将帮助您根据需要定制SaveFileDialog:

AddExtension - 默认为true,并确定SaveFileDialog是否应自动为文件名附加扩展名(如果用户省略)。扩展名将基于所选的过滤器,除非这是不可能的,在这种情况下,它将回退到DefaultExt属性(如果指定)。如果您希望应用程序能够保存没有文件扩展名的文件,则可能必须禁用此选项。

OverwritePrompt - 默认为true,并确定如果用户输入的文件名将导致现有文件被覆盖,SaveFileDialog是否应该要求确认。除非在非常特殊的情况下,您通常希望启用此选项。

Title - 如果您想在对话框中使用自定义标题,则可以覆盖此属性。它默认为“另存为”或本地化的等效项,该属性对OpenFileDialog也有效。

ValidateNames - 默认为true,除非它被禁用,否则它将确保用户在允许用户继续之前只输入有效的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!