WPF C# SaveFileDialog - 如果备用文件夹中存在文件名,则重新打开对话框

WPF C# SaveFileDialog - Reopen Dialog if filename exists in alternate folder

我有一个 WPF 项目,其中有一个自动保存的 "Backup" 文件夹。如果用户在保存项目时选择了不同的名称,我会先检查备份文件夹并警告他们是否已经有同名的项目。如果是这样,我想重新打开 SaveFileDialog 并允许它们重命名。

SaveFileDialog dlg = new SaveFileDialog();
dlg.DefaultExt = ".xml";
dlg.Filter = "xml documents (.xml)|*.xml|All Files (*.*)|*.*";
dlg.FileName = ProjectName;
bool? result = dlg.ShowDialog();

if (result == true)
{
    string changedFilename = System.IO.Path.GetFileNameWithoutExtension(dlg.FileName);
    if (changedFilename != CurrentProjectName)
    {
        if (ExistingProjectNames.Contains(changedFilename))
        {
            if (MessageBox.Show("Project name " + changedFilename + " already exists. Continue?", "Existing Project Name", MessageBoxButton.OKCancel, MessageBoxImage.Warning) == MessageBoxResult.OK)
            {
                CurrentProjectName = changedFilename;
                WriteFile(dlg.FileName);
            }

            else
            {
            //go back to beginning and open dialog again so user can rename
            }

这看起来很简单,但我想不出最好的方法。我想到了递归和 switch 语句,但似乎我把它搞得太复杂了。还有更多 "standard" 的方法吗?

您可以做的一件事是在显示之前在对话框上注册 FileOk 事件。当用户按下对话框中的保存按钮时将调用事件处理程序,您可以选择设置 e.Cancel = true 以防止对话框关闭并允许用户做出其他选择。

另一种选择是在 while 循环中显示对话框,直到满足任何条件,导致它不断重新打开,直到用户执行他们需要做的事情。