OpenFileDialog在.NET Core上
在.NET Core添加对Windows桌面应用程序的支持之后,针对.NET Core的WPF和Windows Forms应用程序可以以与.NET Framework相同的方式使用OpenFileDialog和SaveFileDialog API。这些API已经被移植到在.NET Core 3及更高版本上运行的特定于Windows的桌面包中。
你知道如何在在Linux上运行的Windows窗体应用程序中为OpenFileDialog设置InitialDirectory吗?文件浏览器可以正常工作,但似乎无法接受任何使用`或/的初始目录。
这个问题的出现原因是在Linux上运行的Windows窗体应用程序无法正确设置OpenFileDialog的InitialDirectory属性。在Linux环境中,由于文件系统路径的不同,使用`或/作为初始目录的方式不起作用。
解决这个问题的方法是使用System.IO.Path类中的Path.Combine方法来构建正确的初始目录。可以通过以下方式设置InitialDirectory属性:
using System.IO; // 获取应用程序当前的工作目录 string currentDirectory = Directory.GetCurrentDirectory(); // 设置初始目录为当前工作目录下的"Documents"文件夹 string initialDirectory = Path.Combine(currentDirectory, "Documents"); // 创建OpenFileDialog实例并设置InitialDirectory属性 OpenFileDialog openFileDialog = new OpenFileDialog(); openFileDialog.InitialDirectory = initialDirectory; // 打开文件对话框并处理用户选择的文件 if (openFileDialog.ShowDialog() == DialogResult.OK) { string selectedFile = openFileDialog.FileName; // 处理选择的文件 }
这样,无论应用程序在哪个操作系统上运行,都可以正确设置OpenFileDialog的初始目录。
在使用新的、闪亮的.NET 5.0 Windows应用程序和WPF控件时,可以使用Microsoft.Win32库中的OpenFileDialog()方法。这与Windows Forms版本不同,例如,ShowDialog()方法返回的是bool?而不是DialogResult。
下面是一个示例的MyWpfView.xaml.cs代码:
using Microsoft.Win32; using System.Windows; namespace TestProject { public partial class MyWpfView { public MyWpfView() { InitializeComponent(); } private void BrowseButton_Click(object sender, RoutedEventArgs e) { var fileDialog = new OpenFileDialog(); if (fileDialog.ShowDialog() == true) { FileTextBox.Text = fileDialog.FileName; } } } }
感谢提供"返回bool?而不是DialogResult"的信息!