2011-05-23 66 views
7
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"; 

該擴展總是默認爲.png。看起來DefaultExt被忽略,如果有Filter;那麼它只是默認爲列表中的第一個選項。WPF SaveFileDialog DefaultExt被忽略?

有沒有辦法迫使它真正尊重默認的分機?

回答

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(); 
4

DefaultExt是將在用戶選擇沒有擴展名的文件名時使用的擴展名(至少這是我從閱讀MSDN描述的理解)。

當你的應用程序 的用戶指定的文件名沒有一個 分機,FileDialog的追加一個 擴展文件名。

您可能必須將bmp作爲過濾器列表中的第一項。