WPF SaveFileDialog DefaultExt игнорируется? - PullRequest
8 голосов
/ 24 мая 2011
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;тогда это просто по умолчанию первый параметр в списке.

Есть ли способ заставить его фактически соблюдать стандарт ext?

Ответы [ 2 ]

11 голосов
/ 24 мая 2011

Вы должны установить свойство 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 голосов
/ 24 мая 2011

DefaultExt - это расширение, которое будет использоваться, если пользователь выбирает имя файла без расширения (по крайней мере, я так понимаю, прочитав описание из MSDN).

Когда пользователь вашего приложения указывает имя файла без расширения, FileDialog добавляет расширение к имени файла.

Возможно, вам придется сделать bmp первым элементом в списке фильтров.

...