Как лучше всего воспроизвести функциональность пользовательского интерфейса папки Windows Explorer в WPF?
-
20-09-2019 - |
Вопрос
Так что я использую FileSystemWatcher
Заполнить и обновить плейлист. Я хочу повторить многие функции Windows Explorer, самое главное:
* Встроенное переименование
* Медленно двойной щелчок, чтобы переименовать
Я испытываю эту проблему, так что я подумал, может быть, есть более простой способ, чем переосмыслить колесо? Может быть, я могу каким -то образом разместить окно Windows Explorer в моем приложении в качестве элемента управления?
Решение
В вашем приложении возможно размещение реального окна Windows Explorer, но чревато опасностью: методы различны в XP против Vista против Win7, и вы будете иметь дело со всеми видами низкоуровневых вещей. Я настоятельно рекомендую не попробовать это.
Я думаю, что ваши лучшие варианты:
- Используйте microsoft.win32.openfiledialog, если он может быть легко адаптирован к вашей потребности, или
- Кодировать свою собственную функциональность, или если вы очень смелые:
- Запустите отдельное окно Explorer, необязательно с кодом, который пытается заставить ее позицию и размер быть за пределами вашего приложения (это тоже сложно ...)
Примечания по встроенной функции переименования
Встроенное переименование и медленный дважды щелкните, чтобы переименовать функции, действительно довольно тривиальны для реализации.
В вашем просмотре модель добавить:
- «NewName» строковой зависимости
- «Переименование» Bool Deperiancerporty с PropertyChangeDcallback. Когда «переименование» идет в действие, копируйте имя в NewName. Когда он идет false, если NewName! = Имя переименование файла имя обновления.
В ваш DataTemplate добавьте триггер на «переименование», который заменяет ваш текстовый блок, связанный с «название», с помощью текстового поля, связанного с «NewName».
Добавьте эти обработчики событий: * Событие Keydown: если F2 нажимает переименование переименования. Если ввод нажимается и переименован, установите re rearaming = false. Если ESC нажимает и переименовает имя копирования в NewName и установите reNaming = false. * Событие LOSTFOCUS: SET RENAMING = FALSE * Событие SelectionChanged в контейнере: Запись временной метки последнего изменения выбора. * Mousedown Event: если влево щелкните и выбор изменился> 0,5 секунды назад, установите renaming = true
Многие другие функции просмотра Explorer также легко реализовать, такие как группировка и несколько столбцов.
Надеюсь это поможет.