Окно WPF/Prism, вызывающее CommonOpenFileDialog (выберите каталог), теряет фокус после выбора
У меня есть приложение WPF (Prism), которому нужна функциональность "выбрать каталог". Меню главного окна открывает дочернее окно "Настройки" через пресловутую призму InteractionRequest
, В этом окне "Настройки" есть кнопка для открытия окна "Выбор каталога".
Так как стандарт FolderBrowserDialog
диалог настолько уродлив, я пытался использовать CommonOpenFileDialog
из Windows API Code Pack.
Я пользуюсь услугой от Orc.Controls
обернуть диалог:
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;
}
// ...
}
С моей точки зрения модель, я звоню _selectDirectoryService.DetermineDirectory()
:
public DelegateCommand SelectDirectoryCommand { get; private set; }
private void SelectDirectory()
{
if (_selectDirectoryService.DetermineDirectory())
{
var dir = _selectDirectoryService.DirectoryName;
// ...
}
}
Проблема в том, что после выбора каталога в CommonOpenFileDialog
окно "Настройки" теряет фокус (и по какой-то причине фактически скрывается за развернутым главным окном). В отличие от FolderBrowserDialog
возвращает фокус в окно "Настройки".
Итак, в основном мне нужна либо лучшая реализация "select directory", либо мне нужно найти способ снова сфокусировать окно "Settings" без серьезного нарушения шаблона MVVM. Любые идеи были бы хорошы.
1 ответ
Вы должны установить родителя / владельца окна, чтобы предотвратить его внезапное появление за ним.