WPF でファイル、フォルダーを選択するダイアログボックスを表示する [C#]

WPF でファイルを選択するダイアログボックスとフォルダーを選択するダイアログボックスを表示する方法についてです。

ファイル選択ダイアログを表示する (OpenFileDialog, SaveFileDialog)

WPF でファイルを選択するダイアログ (「ファイルを開くダイアログ」「名前を付けて保存ダイアログ」) を表示する場合は Microsoft.Win32 名前空間にある OpenFileDialog クラスと SaveFileDialog クラスを使います。
使い方は System.Windows.Forms 名前空間にある Windows フォームの OpenFileDialog, SaveFileDialog とほとんど同じです。

ファイルを開く・名前を付けて保存・フォルダー参照 コモンダイアログ [C#]
Windows フォームアプリの改修をしているとファイル・フォルダー関連のコモンダイアログである「ファイルを開く」「名前を付けて保存」「フォ...

WPF でファイル選択ダイアログを表示するサンプル

以下のサンプルではメインウィンドウに配置した2つのボタンからそれぞれのダイアログを表示して、選択されたファイル名 (ファイルパス) をメッセージボックスに表示させています。

画面イメージ

WPF ファイル選択ダイアログサンプル画面

XAML ソース

コードビハインド C# ソース

フォルダー選択ダイアログを表示する (FolderBrowserDialog)

フォルダー参照ダイアログは残念ながら Microsoft.Win32 名前空間に存在しないので System.Windows.Forms.dll への参照を追加して使います。(Windows フォーム と同じ)

ファイルを開く・名前を付けて保存・フォルダー参照 コモンダイアログ [C#]
Windows フォームアプリの改修をしているとファイル・フォルダー関連のコモンダイアログである「ファイルを開く」「名前を付けて保存」「フォ...

WPF でフォルダー選択ダイアログを表示するサンプル

以下のサンプルではファイル選択ダイアログの時と同様に、メインウィンドウに配置したボタンからダイアログを表示して、選択されたファイル名 (ファイルパス) をメッセージボックスに表示させています。

画面イメージ

WPF フォルダー選択ダイアログサンプル画面

XAML ソース

コードビハインド C# ソース

Windows API Code Pack を利用してダイアログボックスを表示する

Windows API Code Pack を使うことで、WPF でファイルを選択するダイアログとフォルダーを選択するダイアログを表示することもできます。

Windows API Code Pack は、以下のサイトからダウンロードできます。
Windows API Code Pack for Microsoft .NET Framework 概要
※ 残念ながら現在では、上記のサイトからのダウンロードはできなくなっていました。
代わりに NuGet からインストールできるので、NuGet でインストールします。

.NET ライブラリーパッケージマネージャー NuGet のインストールとパッケージのインストール
NuGet のインストール方法について書いておきます。 Visual Studio のバージョンは 2010 です。 NuG...

ファイルを選択するダイアログ

ファイルを選択するダイアログを表示するには、Microsoft.WindowsAPICodePack.dll と Microsoft.WindowsAPICodePack.Shell.dll が必要なので、両 DLL への参照を追加します。

ファイルを選択するダイアログのクラスは Microsoft.WindowsAPICodePack.Dialogs 名前空間にあります。

ファイルを開くダイアログを表示する場合は CommonOpenFileDialog クラスを、名前を付けて保存ダイアログを表示する場合は CommonSaveFileDialog クラスをそれぞれ使います。

ダイアログのファイルの種類の設定

Microsoft.Win32 名前空間のダイアログと System.Windows.Forms 名前空間のダイアログでは、ファイルの種類を Filter プロパティに文字列で設定しますが Microsoft.WindowsAPICodePack.Dialogs 名前空間のダイアログには Filter プロパティがありません。
代わりに Microsoft.WindowsAPICodePack.Dialogs.CommonFileDialogFilterCollection 型の Filters というプロパティが用意されていて、以下のように設定します。

ちなみに、以下のように CommonFileDialogFilter クラスのインスタンスを生成して DisplayName プロパティに「ファイルの説明」、Extensions プロパティに「ファイルのパターン (拡張子) 」を設定することもできます。

ダイアログのタイトルの設定

ダイアログのタイトルは、Microsoft.Win32 名前空間のダイアログや System.Windows.Forms 名前空間のダイアログと同じように Title プロパティで設定できますが Microsoft.WindowsAPICodePack.Dialogs 名前空間のダイアログでは、コンストラクタの引数にタイトルを指定することも可能です。

フォルダーを選択するダイアログ

Microsoft.WindowsAPICodePack.Dialogs 名前空間には、フォルダーを選択する専用のクラスがありません。
代わりに、CommonOpenFileDialog クラスを使うことになります。
CommonOpenFileDialog クラスに用意されている IsFolderPicker プロパティを true に設定することで、ファイルではなくフォルダーを選択できるようになります。
Windows API Code Pack フォルダーダイアログ
ファイルを開くダイアログと見た目はほとんど変わりませんが、リストビューにファイルが表示されなくなり [開く] ボタンが [フォルダーの選択] に替わります。

WPF で Windows API Code Pack のダイアログを表示するサンプル

以下のサンプルではメインウィンドウに配置した3つのボタンからそれぞれのダイアログを表示して、選択されたファイル名 (ファイルパス) or フォルダーパスをメッセージボックスに表示させています。

画面イメージ

WPF で Windows API Code Pack を利用してファイル、フォルダー選択ダイアログを表示するサンプル画面

XAML ソース

コードビハインド C# ソース

上記の例では WPF からダイアログを表示しましたが、同じ様にすれば Windows フォームからも Windows API Code Pack を利用してダイアログを表示できます。

おまけ

Windows API Code Pack の CommonOpenFileDialog クラスと CommonSaveFileDialog クラスのプロパティの一覧を一応記載しておきます。

CommonOpenFileDialog のプロパティ

  • AddToMostRecentlyUsedList
  • AllowNonFileSystemItems
  • AllowPropertyEditing
  • Controls
  • CookieIdentifier
  • DefaultDirectory
  • DefaultDirectoryShellContainer
  • DefaultExtension
  • DefaultFileName
  • EnsureFileExists
  • EnsurePathExists
  • EnsureReadOnly
  • EnsureValidNames
  • FileAsShellObject
  • FileName
  • FileNames
  • FilesAsShellObject
  • Filters
  • InitialDirectory
  • InitialDirectoryShellContainer
  • IsFolderPicker
  • Multiselect
  • NavigateToShortcut
  • RestoreDirectory
  • SelectedFileTypeIndex
  • ShowHiddenItems
  • ShowPlacesList
  • Title

CommonSaveFileDialog のプロパティ

  • AddToMostRecentlyUsedList
  • AllowPropertyEditing
  • AlwaysAppendDefaultExtension
  • CollectedProperties
  • Controls
  • CookieIdentifier
  • CreatePrompt
  • DefaultDirectory
  • DefaultDirectoryShellContainer
  • DefaultExtension
  • DefaultFileName
  • EnsureFileExists
  • EnsurePathExists
  • EnsureReadOnly
  • EnsureValidNames
  • FileAsShellObject
  • FileName
  • Filters
  • InitialDirectory
  • InitialDirectoryShellContainer
  • IsExpandedMode
  • NavigateToShortcut
  • OverwritePrompt
  • RestoreDirectory
  • SelectedFileTypeIndex
  • ShowHiddenItems
  • ShowPlacesList
  • Title

ご参考までに