如何修复wpf中打开的文件对话框不进行筛选



这是我制作的代码

Microsoft.Win32.OpenFileDialog openFileDialog = new Microsoft.Win32.OpenFileDialog();
openFileDialog.InitialDirectory = System.Windows.Forms.Application.StartupPath;
Nullable<bool> result = openFileDialog.ShowDialog();
openFileDialog.Filter = "Lua scripts (*.lua)|*.lua|Txt Scripts (*.txt*)|*.txt";
openFileDialog.Title = "Save Scripts";
if (result == true)
{
TextEditor.Text = File.ReadAllText(openFileDialog.FileName);
}
  • 您在代码集openFileDialog.Filter = "Lua scripts (*.lua)|*.lua|Txt Scripts (*.txt*)|*.txt";之前调用.ShowDialog()
  • 另外,不要在WPF中使用System.Windows.Forms.Application.StartupPath,而是使用AppDomain.CurrentDomain.BaseDirectory——或者只使用Environment.CurrentDirectory
  • IMO,为了使用非标准文件扩展名的用户的利益,您应该始终具有"All files (*.*)"过滤器选项
  • 您可以将if (result == true)简化为仅if (result ?? false)
  • 请注意,OpenFileDialog并不能保证OpenFileDialog.FileName中的文件确实存在或有效,您需要自己这样做(例如if( File.Exists(...) ) { ... }(

重新排列您的线路,如下所示:

using Microsoft.Win32;
const String FILTER_LUA = "Lua scripts (*.lua)|*.lua";
const String FILTER_TXT = "Text files (*.txt)|*.txt";
const String FILTER_ALL = "All files (*.*)|*";
// ...
OpenFileDialog ofd = new OpenFileDialog()
{
//  InitialDirectory = AppDomain.CurrentDomain.BaseDirectory,
InitialDirectory = Environment.CurrentDirectory,
Filter           = FILTER_LUA + "|" + FILTER_TXT + "|" + FILTER_ALL,
Title            = "Open script file"
};
Boolean? result = ofd.ShowDialog();
if( ( result ?? false ) && File.Exists( ofd.FileName ) )
{
String fileText = File.ReadAllText( ofd.FileName ); 
this.TextEditor.Text = fileText;
}

最新更新