WPF SaveFileDialog DefaultExt被忽略了吗?

mpe*_*pen 8 wpf controls savefiledialog

var dlg = new SaveFileDialog();
dlg.FileName = "graph";
dlg.DefaultExt = ".bmp";
dlg.Filter = "PNG|*.png|DOT|*.dot|Windows Bitmap Format|*.bmp|GIF|*.gif|JPEG|*.jpg|PDF|*.pdf|Scalable Vector Graphics|*.svg|Tag Image File Format|*.tiff";
Run Code Online (Sandbox Code Playgroud)

扩展名始终默认为.png.DefaultExt如果有的话,似乎被忽略了Filter; 那么它只是默认为列表中的第一个选项.

有没有办法强迫它真正尊重默认的分机?

max*_*max 12

你应该设置FilterIndex属性而不是DefaultExt.如果您仍想使用DefaultExt,可以手动将其转换为适当的过滤器索引:

public static void UseDefaultExtAsFilterIndex(FileDialog dialog)
{
    var ext = "*." + dialog.DefaultExt;
    var filter = dialog.Filter;
    var filters = filter.Split('|');
    for(int i = 1; i < filters.Length; i += 2)
    {
        if(filters[i] == ext)
        {
            dialog.FilterIndex = 1 + (i - 1) / 2;
            return;
        }
    }
}

var dlg = new SaveFileDialog();
dlg.FileName = "graph";
dlg.DefaultExt = ".bmp";
dlg.Filter = "PNG|*.png|DOT|*.dot|Windows Bitmap Format|*.bmp|GIF|*.gif|JPEG|*.jpg|PDF|*.pdf|Scalable Vector Graphics|*.svg|Tag Image File Format|*.tiff";
UseDefaultExtAsFilterIndex(dlg);
dlg.ShowDialog();
Run Code Online (Sandbox Code Playgroud)


Bal*_*a R 5

DefaultExt 是用户选择没有扩展名的文件名时将使用的扩展名(至少这是我阅读 MSDN 描述的理解)。

当应用程序的用户指定没有扩展名的文件名时,FileDialog 会在文件名后附加一个扩展名。

您可能必须制作bmp过滤器列表中的第一项。


小智 2

我晚了几年,但巧合的是,我在查看此问题的代码时找到了问题的解决方案。

他在那里指定了不带.. 然后我查看了微软文档。在示例中,DefaultExt还指定了不带..

如果DefaultExt用 指定.FileDialog将自动选择过滤器的第一个扩展。

DefaultExt应设置为不带..
这意味着在您的示例中dlg.DefaultExt = ".bmp";您需要更改".bmp""bmp"...