Размещение реального окна Windows Explorer в вашем приложении возможно, но сопряжено с опасностью: методы в XP и Vista отличаются от Win7, и вы будете иметь дело со всеми видами низкоуровневых вещей. Я настоятельно рекомендую не пытаться.
Я думаю, что ваши лучшие варианты:
- Используйте Microsoft.Win32.OpenFileDialog, если его можно легко адаптировать к вашим потребностям, или
- Код вашей собственной функциональности, или если вы очень смелый:
- Запустить отдельное окно проводника, опционально с кодом, который пытается принудительно установить его положение и размер над вашим приложением (это тоже сложно ...)
Примечания о функции встроенного переименования
Встроенное переименование и медленный двойной щелчок для переименования функций действительно довольно просты в реализации.
На ваш взгляд модель добавить:
- Строка "NewName" DependencyProperty
- "Переименование" bool DependencyProperty с PropertyChangedCallback. Когда «Переименование» станет правдой, скопируйте Имя в NewName. Когда оно становится ложным, если NewName! = Имя, переименуйте файл в Имя обновления.
В вашем DataTemplate добавьте триггер «Переименование», который заменяет ваш TextBlock, связанный с «Name», на TextBox, связанный с «NewName».
Добавьте эти обработчики событий:
* Событие KeyDown: если нажата клавиша F2, происходит переименование. Если нажата Enter и переименовывается, установите Renaming = false. Если нажата Esc и переименовывается, скопируйте Name в NewName и установите Renaming = false.
* Событие LostFocus: Set Renaming = false
* Событие SelectionChanged для контейнера: отметка времени последнего изменения выбора.
* Событие MouseDown: если щелчок левой кнопкой мыши и выбор изменились> 0,5 секунды назад, установите Renaming = true
Многие другие функции представления Explorer также легко реализуются, такие как группировка и несколько столбцов.
Надеюсь, это поможет.