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)
DefaultExt 是用户选择没有扩展名的文件名时将使用的扩展名(至少这是我阅读 MSDN 描述的理解)。
当应用程序的用户指定没有扩展名的文件名时,FileDialog 会在文件名后附加一个扩展名。
您可能必须制作bmp过滤器列表中的第一项。