private void Navigate() { // Если директория - входим в неё if (lvFileList.SelectedItem is DirectoryCover) { //ListViewItem lvi = (ListViewItem)lvFileList.SelectedItem; //DirectoryCover cover = (DirectoryCover)lvi.Content; DirectoryCover cover = (DirectoryCover)lvFileList.SelectedItem; _BuildFileSystemView(cover.DirectoryElement); } // Если файл - запускаем else if (lvFileList.SelectedItem is FileCover) { FileCover cover = (FileCover)lvFileList.SelectedItem; //System.Diagnostics.Process process = new System.Diagnostics.Process(); //process.StartInfo.WorkingDirectory = // System.IO.Path.GetDirectoryName(cover.FileElement.FullName); //process.StartInfo.UseShellExecute = true; //process.StartInfo.FileName = cover.FileElement.FullName; //process.Start(); //ExplorerNet.Tools.LastStartedFiles.LastStartedFilesManager lsfm = // new Tools.LastStartedFiles.LastStartedFilesManager(); //lsfm.AddlastStartedFile(cover.FileElement.FullName); ExplorerNet.Tools.FileStarter.Start(cover.FileElement.FullName); } // Если елемент родительской директории - создаём его else if (lvFileList.SelectedItem is ParentDirectoryCover) { ParentDirectoryCover cover = (ParentDirectoryCover)lvFileList.SelectedItem; _BuildFileSystemView(cover.ParentDirectoryElement); } }
/// <summary> /// Создаёт отражение участка файловой системы /// </summary> /// <param name="directory"></param> private void _BuildFileSystemView(DirectoryInfo directory) { //Очищаем список //lvFileList.Items.Clear(); lvFileList.ItemsSource = null; _currentDirectory = directory; List <CustomFileSystemCover> list = new List <CustomFileSystemCover>(); //CustomFileSystemCover cover = null; //lvFileList.ItemContainerGenerator.StatusChanged += // delegate(Object sender, EventArgs e) // { // ListViewItem lvi = (ListViewItem)lvFileList.ItemContainerGenerator.ContainerFromItem(cover); // if (lvi != null) // { // lvi.PreviewMouseLeftButtonDown += delegate(Object sender, MouseButtonEventArgs e) // { // DragDrop.do // } // } // }; // Если у текущего каталога есть родительский каталог, создаём елемент, дающий возможность // перейти в родительский каталог if (directory.Parent != null) { ParentDirectoryCover cover = new ParentDirectoryCover(directory.Parent); list.Add(cover); //lvFileList.Items.Add(cover); } // Создаём елементы отражающие директории try { foreach (var dir in directory.GetDirectories()) { DirectoryCover cover = new DirectoryCover(dir); list.Add(cover); #region comments Этот вариант был исправлен на более правельный //Получаем ListViewItem, когда он будет создан и подписываемся на его события //lvFileList.ItemContainerGenerator.StatusChanged += // delegate(Object sender, EventArgs e) // { // ListViewItem lvi = (ListViewItem)lvFileList.ItemContainerGenerator.ContainerFromItem(cover); // if (lvi != null) // { // lvi.AllowDrop = true; // //Список событий. Сделан чтобы не подписываться много раз на одно событие // List<string> eventList = null; // if (lvi.Tag == null) // { // eventList = new List<string>(); // lvi.Tag = eventList; // } // else // { // eventList = (List<string>)lvi.Tag; // } //Если события нет в списке, то подписываемся на него //if (!eventList.Contains("DragEnter")) //{ // eventList.Add("DragEnter"); // lvi.DragEnter += delegate(Object sender1, DragEventArgs e1) // { // if (e1.Effects == DragDropEffects.Move) // { // lvi.Opacity = 0.5; // } // }; //} //Если события нет в списке, то подписываемся на него //if (!eventList.Contains("DragLeave")) //{ // eventList.Add("DragLeave"); // lvi.DragLeave += delegate(Object sender1, DragEventArgs e1) // { // lvi.Opacity = 1; // }; //} //Если события нет в списке, то подписываемся на него //if (!eventList.Contains("Drop")) //{ // eventList.Add("Drop"); // lvi.Drop += delegate(Object sender1, DragEventArgs e1) // { // lvi.Opacity = 1; // DataObject dObj = (DataObject)e1.Data; // //Делаем не возможным обрабатывать Drop lvFileList // this.isListViewDroped = false; // if (dObj.GetDataPresent(typeof(List<CustomFileSystemCover>))) // { // // If the desired data format is present, use one of the GetData methods to retrieve the // // data from the data object. // List<CustomFileSystemCover> selectedList = dObj.GetData(typeof(List<CustomFileSystemCover>)) // as List<CustomFileSystemCover>; // //MessageBox.Show(selectedList[0].Name); // List<FileSystemInfo> fsiList = new List<FileSystemInfo>(); // foreach (var sl in selectedList) // { // if (sl.FileSystemElement.GetType() == typeof(DirectoryInfo)) // { // fsiList.Add(new DirectoryInfo(sl.FileSystemElement.FullName)); // } // else if (sl.FileSystemElement.GetType() == typeof(FileInfo)) // { // fsiList.Add(new FileInfo(sl.FileSystemElement.FullName)); // } // else // { // new Exception("Type not support!"); // } // } // DirectoryCover dc = (DirectoryCover)lvi.Content; // CopyWindow cw = new CopyWindow(fsiList, dc.FileSystemElement.FullName); // cw.ShowDialog(); // } // //DragDrop.RemovePreviewDropHandler(lvFileList, lvFileList_Drop); // }; //} //} //}; #endregion //comments } } catch (Exception) { MessageBox.Show(LanguagesManager.GetCurrLanguage().FPIsNotAccess, "", MessageBoxButton.OK, MessageBoxImage.Warning); this.Path = System.IO.Path.GetDirectoryName(this.Path); return; } // Создаём елементы отражающие файлы foreach (var file in directory.GetFiles()) { FileCover cover = new FileCover(file); list.Add(cover); //lvFileList.Items.Add(cover); } //list.Sort(new NameUpSorter()); SortingManager.Sort(list, SortingKind.NameUp); lvFileList.ItemsSource = list; // Задаём в текстовом поле текущий путь txtPath.Text = directory.FullName; this.watcher.Path = directory.FullName; //this.watcher.Changed += new FileSystemEventHandler(watcher_Changed); this.watcher.EnableRaisingEvents = true; }