private void Search_TextBox_TextChanged(object sender, TextChangedEventArgs e) { var txt_box_search = (TextBox)sender; var searching_filename = txt_box_search.Text; if (volumes != null && volumes.CurrentDirName != null && txt_box_search.IsFocused) { int i = 0; foreach (var file in list_view_files.Items) { File_ico_and_name file_ico_name = (File_ico_and_name)file; if (file_ico_name.Name.StartsWith(searching_filename)) { file_ico_name.Visible_mode = Visibility.Visible; //оставим нужные элементы } else//скроем { file_ico_name.Visible_mode = Visibility.Collapsed; } i++; } list_view_files.Items.Refresh(); } else { ;//негде искать } }
private void List_view_files_MouseDoubleClick(object sender, MouseButtonEventArgs e) { var list_folders_and_files = (ListView)sender; if (list_folders_and_files != null && list_folders_and_files.Items.Count > 0 && list_folders_and_files.SelectedIndex >= 0) { File_ico_and_name file_ico_name = (File_ico_and_name)list_folders_and_files.SelectedValue; string doc_or_folder_name = file_ico_name.Name; var full_path = Path.Combine(volumes.CurrentDirName, doc_or_folder_name); if (!string.IsNullOrEmpty(doc_or_folder_name) && Directory.Exists(full_path)) { if (Directory.Exists(full_path)) { try { thread_get_metadata_of_folders_files.Abort();//остановим поток если пользователь решил перейти к другой папке volumes.Directory_down(list_view_files, list_view_path_frames, full_path); } catch (UnauthorizedAccessException) { MessageBox.Show("Вам отказано в доступе к данной папке!"); } } else { volumes.Update_listview_folders(list_view_files); MessageBox.Show($"Директория не существует по пути {full_path}!"); } } else//значит это файл { if (File.Exists(full_path)) { try { Process.Start(full_path); } catch (System.ComponentModel.Win32Exception)//не удалось найти приложение для данного файла { Process.Start(new ProcessStartInfo { FileName = "explorer.exe", Arguments = full_path }); //вызовем открыть с помощью и пусть пользователь выберет } } else { volumes.Update_listview_folders(list_view_files); MessageBox.Show($"Файл не существует по пути {full_path}!"); } } } else { ;//элемент не выбран или его нет } }
private void List_view_files_MouseLeftButtonUp(object sender, MouseButtonEventArgs e) { ListView list_files = (ListView)sender; if (list_files.SelectedValue != null) { data_grid_files_meta_data.Visibility = Visibility.Visible; File_ico_and_name file_ico_name = (File_ico_and_name)list_files.SelectedValue; var path_dir = Path.Combine(volumes.CurrentDirName, file_ico_name.Name); FileInfo fileinfo = new FileInfo(path_dir); if (Previos_file_name != file_ico_name.Name) { if (thread_get_metadata_of_folders_files != null) { thread_get_metadata_of_folders_files.Abort(); } else { ;//поток еще ни разу не был создан и вызван } if ((fileinfo.Attributes & FileAttributes.Directory) == FileAttributes.Directory) { data_grid_files_meta_data.Items.Clear(); //обнулим счетчики и вызовем поток для новой выбранной папки files_counter = 0; size_folder_in_byte = 0; thread_get_metadata_of_folders_files = new Thread(new ParameterizedThreadStart(Count_folder_size)); thread_get_metadata_of_folders_files.Start(path_dir); } else//это не директория а файл { Dispatcher.Invoke(() =>//Добавлено из -за вычисления размера файла в background, чтобы не перетирались значения в datagrid { data_grid_files_meta_data.Items.Clear(); foreach (var file_prop in fileinfo.GetType().GetProperties()) { if (file_prop.Name == "Length") { data_grid_files_meta_data.Items.Add(new { Name = file_prop.Name, Value = $"{(long)file_prop.GetValue(fileinfo) >> 10} Кб" }); } else { data_grid_files_meta_data.Items.Add(new { Name = file_prop.Name, Value = file_prop.GetValue(fileinfo) }); } } }, DispatcherPriority.ContextIdle); } Previos_file_name = file_ico_name.Name; } else { //мы уже итак вычисляем или вычислили для этого файла метаданные } } else { ;//клик был не на элемент } }