"ディレクトリ選択"機能が必要なWPF(プリズム)アプリケーションがあります。メインウィンドウのメニューは、悪意のあるPrism InteractionRequest
を介して子の「設定」ウィンドウを開きます。その "設定"ウィンドウには、 "ディレクトリの選択"ウィンドウを開くためのボタンがあります。CommonOpenFileDialog(選択ディレクトリ)を呼び出しているWPF/Prismウィンドウは、選択後にフォーカスが失われます
標準FolderBrowserDialog
のダイアログはとても醜いので、私はからCommonOpenFileDialog
を使用しようとしました。私は_selectDirectoryService.DetermineDirectory()
呼んで、私の見解モデルから
using Microsoft.WindowsAPICodePack.Dialogs;
public class MicrosoftApiSelectDirectoryService : ISelectDirectoryService
{
public bool DetermineDirectory()
{
var browserDialog = new CommonOpenFileDialog();
browserDialog.IsFolderPicker = true;
browserDialog.Title = Title;
browserDialog.InitialDirectory = InitialDirectory;
if (browserDialog.ShowDialog() == CommonFileDialogResult.Ok)
{
DirectoryName = browserDialog.FileName;
return true;
}
DirectoryName = string.Empty;
return false;
}
// ...
}
:
は、私は、ダイアログをラップするOrc.Controls
からサービスを利用
public DelegateCommand SelectDirectoryCommand { get; private set; }
private void SelectDirectory()
{
if (_selectDirectoryService.DetermineDirectory())
{
var dir = _selectDirectoryService.DirectoryName;
// ...
}
}
問題があることCommonOpenFileDialog
でディレクトリを選択した後、 「設定」ウィンドウはフォーカスを失います(何らかの理由で、最大化されたメインウィンドウの背後に隠れてしまいます)。対照的に、FolderBrowserDialog
は、「設定」ウィンドウにフォーカスを戻します。
基本的に私はより良い「ディレクトリ選択」の実装が必要です。またはMVVMパターンの重大な違反なしに「設定」ウィンドウに再度フォーカスする方法を見つける必要があります。任意のアイデアをいただければ幸いです。
あなた自身のディレクトリブラウザを作成するための多くの作業、特にWindowsファイルブラウザにあるすべての機能が必要な場合だから私はそれに反対することをお勧めします。私にとって、DirectoryBrowserはUIコントロールであり、アプリケーションのUIレイヤの一部であるため、Viewのコードビハインドに関連するコードがあることがよくあります。それはあなたのための選択肢ですか?フォーカスの設定は、私の意見ではViewレイヤーの責任でもあります。あなたが実際にそれをViewModelレイヤーの一部と考えているなら、ビュー内でダイアログを正しく表示/非表示するためのDialogServiceを提案します。 – Rachel