Окно 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 ответ

Вы должны установить родителя / владельца окна, чтобы предотвратить его внезапное появление за ним.

Другие вопросы по тегам