private TreeViewItemEx SearchNext(TreeViewItemEx item, Boolean first) { TreeViewItemEx result = null; if (first && item.HasItems) { result = (TreeViewItemEx)item.Items[0]; } else { int index = item.ParentItems.IndexOf(item); if (index == -1) { return(null); } if (item.ParentItems.Count > (index + 1)) { // В текущий коллекции найден следующий элемент result = (TreeViewItemEx)item.ParentItems[index + 1]; } else { // Перебор по родителям, любой следующий дочерний элемент будет найденным result = SearchNext(item.ParentItem, false); } } return(result); }
public TreeViewItemEx(TreeView treeView, TreeViewItemEx parent) { _tree = treeView; _parentItem = parent; if (parent == null) { _parentItems = _tree.Items; } else { _parentItems = parent.Items; } StackPanel stack = new StackPanel(); stack.Orientation = Orientation.Horizontal; Header = stack; // Uncomment this code If you want to add an Image after the Node-HeaderText // textBlock = new TextBlock(); // textBlock.VerticalAlignment = VerticalAlignment.Center; // stack.Children.Add(textBlock); _image = new Image(); _image.VerticalAlignment = VerticalAlignment.Center; _image.Margin = new Thickness(0, 0, 4, 0); _image.Width = IMAGE_SIZE; _image.Height = IMAGE_SIZE; _image.Source = _iconSource; stack.Children.Add(_image); // Add the HeaderText After Adding the icon _textBlock = new TextBlock(); _textBlock.VerticalAlignment = VerticalAlignment.Center; stack.Children.Add(_textBlock); }
public TreeViewItemEx SearchPrev(TreeViewItemEx item) { int index = ParentItems.IndexOf(item); if (index == -1) { return(null); } TreeViewItemEx result = null; if (index != 0) { // В текущий коллекции найден предыдущий элемент result = (TreeViewItemEx)ParentItems[index - 1]; } else if (ParentItem != null) { result = ParentItem; } else { // Перебор по родителям, любой следующий дочерний элемент будет найденным result = SearchPrev(ParentItem); } return(result); }
private void SetDragOverItem(TreeViewItemEx item) { if (_dragOverItem != item) { // Смена выделения // Удаление предыдущего выделения if (_dragOverItem != null) { SetSelectItemColor(_dragOverItem, false); } // Установка нового выделения (если выделение не содержится в текущих перемещаемых элементах) if (item != null) { int index = SelectedItems.IndexOf(item); if (index == -1) { SetSelectItemColor(item, true); _dragOverItem = item; } } else { _dragOverItem = null; } } }
public virtual int Compare(Object x, Object y) { TreeViewItemEx localX = x as TreeViewItemEx; TreeViewItemEx localY = y as TreeViewItemEx; int result = String.Compare(localX.Text, localY.Text); return(result); }
public TreeViewItemEx Add(TreeViewItemEx parent, String text, String imageUri, Object tag) { TreeViewItemEx item = new TreeViewItemEx(PART_treeView, parent); item.Text = text; item.ImageUri = imageUri; item.Tag = tag; Add(parent, item); return(item); }
private void TreeView_MouseDoubleClick(Object sender, MouseButtonEventArgs e) { if (OnDoubleClick != null) { TreeViewItemEx item = SelectedItem; if (item != null) { OnDoubleClick(item); } } }
private Boolean SelectedWithShift(TreeViewItemEx selectedItem) { if (_selectedItems.Count > 0) { // Уже был выделен элемент: Удаление всех TreeViewItemEx firstItem = _selectedItems[0]; // Сброс предыдущего выделенного списка foreach (TreeViewItemEx item in _selectedItems) { SetSelectItemColor(item, false); } _selectedItems.Clear(); // Добавление всех элементов от первого до нового выделенного // Определение направления прохода (вверх или вниз) int firstIndex = firstItem.Index; int lastIndex = selectedItem.Index; Boolean inc = (firstIndex < lastIndex) ? true : false; do { // Добавление в список выделенных _selectedItems.Add(firstItem); if (firstItem == selectedItem) { break; } if (inc) { firstItem = firstItem.NextItem; } else { firstItem = firstItem.PrevItem; } } while (firstItem != null); // Визульаное выделение элементов foreach (TreeViewItemEx item in _selectedItems) { SetSelectItemColor(item, true); } return(true); } return(false); }
public void Remove(TreeViewItemEx item) { if (item != null) { TreeViewItemEx parent = item.ParentItem; if (parent == null) { PART_treeView.Items.Remove(item); } else { parent.Items.Remove(item); } } }
private void SetSelectItemColor(TreeViewItemEx item, Boolean select) { if (select) { item.BorderBrush = Gui.HexToColor("#adc6e5"); // item.BorderThickness = new Thickness(1.5); item.Background = (Brush)this.FindResource("brushSelected"); item.Foreground = Brushes.Black; } else { item.BorderBrush = null; item.Background = Brushes.White; item.Foreground = Brushes.Black; } }
private void TreeView_SelectedItemChanged(Object sender, RoutedPropertyChangedEventArgs <Object> e) { TreeViewItemEx selectedItem = PART_treeView.SelectedItem as TreeViewItemEx; if (selectedItem == null) { return; } // Удаление текущего выделения selectedItem.IsSelected = false; selectedItem.Focus(); // Выделение с нажатым "Shift" if (Keyboarder.IsShift == true) { // Выделение обработано функцией if (SelectedWithShift(selectedItem) == true) { return; } } // Выделение с нажатым "Control" if (Keyboarder.IsControl == false) { // Сброс предыдущего выделенного списка foreach (TreeViewItemEx item in _selectedItems) { SetSelectItemColor(item, false); } _selectedItems.Clear(); } // Добавление нового элемента в список SetSelectItemColor(selectedItem, true); _selectedItems.Add(selectedItem); // Передача события if (OnSelectedItem != null) { OnSelectedItem(selectedItem, null); } }
private int SearchSort(ItemCollection coll, TreeViewItemEx item) { int count = coll.Count; if (_sortDirection != SortDirection.None) { for (int index = 0; index < count; index++) { Object curr = coll[index]; if (_sorter.Compare(curr, item) == (int)_sortDirection) { return(index); } } } return(count); }
public TreeViewControl() { InitializeComponent(); // Конфигурация работы "Веделение элементов" _selectedItems = new List<TreeViewItemEx>(); PART_treeView.SelectedItemChanged += new RoutedPropertyChangedEventHandler<object>(TreeView_SelectedItemChanged); PART_treeView.MouseDoubleClick += new MouseButtonEventHandler(TreeView_MouseDoubleClick); // Конфигурация работы "Drag&Drop" _dragDrop = new DragDroper(); _dragDrop.Init(PART_treeView, TreeView_DragDrop); _dragOverItem = null; OnDragDrop = null; // Конфигурация работы "DoubleClick" OnDoubleClick = null; // Настройка сортировки _sortDirection = SortDirection.None; _sorter = new TreeViewSorter(); }
public TreeViewControl() { InitializeComponent(); // Конфигурация работы "Веделение элементов" _selectedItems = new List <TreeViewItemEx>(); PART_treeView.SelectedItemChanged += new RoutedPropertyChangedEventHandler <object>(TreeView_SelectedItemChanged); PART_treeView.MouseDoubleClick += new MouseButtonEventHandler(TreeView_MouseDoubleClick); // Конфигурация работы "Drag&Drop" _dragDrop = new DragDroper(); _dragDrop.Init(PART_treeView, TreeView_DragDrop); _dragOverItem = null; OnDragDrop = null; // Конфигурация работы "DoubleClick" OnDoubleClick = null; // Настройка сортировки _sortDirection = SortDirection.None; _sorter = new TreeViewSorter(); }
public TreeViewItemEx Add(TreeViewItemEx parent, TreeViewItemEx item) { ItemCollection coll; if (parent == null) { coll = PART_treeView.Items; } else { coll = parent.Items; } // Поиск вхождения сортировки int index = SearchSort(coll, item); // Добавление элемента coll.Insert(index, item); item.IsExpanded = true; return(item); }
public static TreeViewItemEx Search(TreeViewItemEx root, TreeViewItemEx value, Object tag) { if (root == null) { return(null); } foreach (TreeViewItemEx item in root.ParentItems) { if (tag != null) { if (item.Tag == tag) { return(item); } } else { if (item == value) { return(item); } } if (item.HasItems) { TreeViewItemEx result = TreeViewItemEx.Search((TreeViewItemEx)item.Items[0], value, tag); if (result != null) { return(result); } } } return(null); }
public TreeViewItemEx Add(TreeViewItemEx parent, String text) { return(Add(parent, text, null, null)); }
public static TreeViewItemEx Search(TreeViewItemEx root, TreeViewItemEx value, Object tag) { if (root == null) return null; foreach (TreeViewItemEx item in root.ParentItems) { if (tag != null) { if (item.Tag == tag) return item; } else { if (item == value) return item; } if (item.HasItems) { TreeViewItemEx result = TreeViewItemEx.Search((TreeViewItemEx)item.Items[0], value, tag); if (result != null) return result; } } return null; }
public TreeViewItemEx SearchPrev(TreeViewItemEx item) { int index = ParentItems.IndexOf(item); if (index == -1) return null; TreeViewItemEx result = null; if (index != 0) { // В текущий коллекции найден предыдущий элемент result = (TreeViewItemEx)ParentItems[index - 1]; } else if (ParentItem != null) { result = ParentItem; } else { // Перебор по родителям, любой следующий дочерний элемент будет найденным result = SearchPrev(ParentItem); } return result; }
private Boolean SelectedWithShift(TreeViewItemEx selectedItem) { if (_selectedItems.Count > 0) { // Уже был выделен элемент: Удаление всех TreeViewItemEx firstItem = _selectedItems[0]; // Сброс предыдущего выделенного списка foreach (TreeViewItemEx item in _selectedItems) SetSelectItemColor(item, false); _selectedItems.Clear(); // Добавление всех элементов от первого до нового выделенного // Определение направления прохода (вверх или вниз) int firstIndex = firstItem.Index; int lastIndex = selectedItem.Index; Boolean inc = (firstIndex < lastIndex) ? true : false; do { // Добавление в список выделенных _selectedItems.Add(firstItem); if (firstItem == selectedItem) break; if (inc) firstItem = firstItem.NextItem; else firstItem = firstItem.PrevItem; } while (firstItem != null); // Визульаное выделение элементов foreach (TreeViewItemEx item in _selectedItems) SetSelectItemColor(item, true); return true; } return false; }
public TreeViewItemEx(TreeView treeView, TreeViewItemEx parent) { _tree = treeView; _parentItem = parent; if (parent == null) _parentItems = _tree.Items; else _parentItems = parent.Items; StackPanel stack = new StackPanel(); stack.Orientation = Orientation.Horizontal; Header = stack; // Uncomment this code If you want to add an Image after the Node-HeaderText // textBlock = new TextBlock(); // textBlock.VerticalAlignment = VerticalAlignment.Center; // stack.Children.Add(textBlock); _image = new Image(); _image.VerticalAlignment = VerticalAlignment.Center; _image.Margin = new Thickness(0, 0, 4, 0); _image.Width = IMAGE_SIZE; _image.Height = IMAGE_SIZE; _image.Source = _iconSource; stack.Children.Add(_image); // Add the HeaderText After Adding the icon _textBlock = new TextBlock(); _textBlock.VerticalAlignment = VerticalAlignment.Center; stack.Children.Add(_textBlock); }
public void Remove(TreeViewItemEx item) { if (item != null) { TreeViewItemEx parent = item.ParentItem; if (parent == null) PART_treeView.Items.Remove(item); else parent.Items.Remove(item); } }
public TreeViewItemEx Search(TreeViewItemEx item, Object tag) { TreeViewItemEx result = TreeViewItemEx.Search(Root, item, tag); return(result); }
private TreeViewItemEx SearchNext(TreeViewItemEx item, Boolean first) { TreeViewItemEx result = null; if (first && item.HasItems) result = (TreeViewItemEx)item.Items[0]; else { int index = item.ParentItems.IndexOf(item); if (index == -1) return null; if (item.ParentItems.Count > (index + 1)) { // В текущий коллекции найден следующий элемент result = (TreeViewItemEx)item.ParentItems[index + 1]; } else { // Перебор по родителям, любой следующий дочерний элемент будет найденным result = SearchNext(item.ParentItem, false); } } return result; }
public TreeViewItemEx Search(TreeViewItemEx item, Object tag) { TreeViewItemEx result = TreeViewItemEx.Search(Root, item, tag); return result; }
public TreeViewItemEx Add(TreeViewItemEx parent, String text, String imageUri, Object tag) { TreeViewItemEx item = new TreeViewItemEx(PART_treeView, parent); item.Text = text; item.ImageUri = imageUri; item.Tag = tag; Add(parent, item); return item; }
public TreeViewItemEx Add(TreeViewItemEx parent, String text) { return Add(parent, text, null, null); }
private Object TreeView_DragDrop(DragDroperOperation oper, Object data) { switch (oper) { case DragDroperOperation.Start: { List <TreeViewItemEx> items = SelectedItems; if (items.Count > 0) { if (CheckDragDrop(oper, items, null) == true) { return(items); } } } break; case DragDroperOperation.Move: { if (CheckDragDrop(oper, data, null) == true) { // Определение элемента, над которым сейчас находится курсор TreeViewItemEx dragOverItem = GetDragOverItem(); // Выделение элемента (для подстветки позиции куда перемещается элемент SetDragOverItem(dragOverItem); // Возвращение результата: Можно перемещать данные return(data); } } break; case DragDroperOperation.Stop: { if (CheckDragDrop(oper, data, null) == true) { TreeViewItemEx destItem = DragDestItem; if (DragDestItem == null) { destItem = DragOverItem; } if (destItem != null) { // Перемещение элементов на новые позиции (копирование) List <TreeViewItemEx> items = (List <TreeViewItemEx>)data; List <TreeViewItemEx> newItems = new List <TreeViewItemEx>(); foreach (TreeViewItemEx item in items) { TreeViewItemEx newItem = this.Add(destItem, item.Text, item.ImageUri, item.Tag); newItems.Add(newItem); } Boolean isMove = (Keyboarder.IsControl == false); if (isMove) { // Операция копирования не использовалась: Операция перемещения, удаление перемещаемых элементов foreach (TreeViewItemEx item in items) { this.Remove(item); } } // Оповещение приложения об окончании операции if (isMove) { CheckDragDrop(DragDroperOperation.EndMove, items, newItems); } else { CheckDragDrop(DragDroperOperation.EndCopy, items, newItems); } } // end if (определен получатель операции) } // end if (операция подтверждена приложением) // Удаление выделения (использовался в операции DragDrop) SetDragOverItem(null); } break; } // end switch (анализ операции) return(null); }
public TreeViewItemEx Add(TreeViewItemEx parent, TreeViewItemEx item) { ItemCollection coll; if (parent == null) coll = PART_treeView.Items; else coll = parent.Items; // Поиск вхождения сортировки int index = SearchSort(coll, item); // Добавление элемента coll.Insert(index, item); item.IsExpanded = true; return item; }
private int SearchSort(ItemCollection coll, TreeViewItemEx item) { int count = coll.Count; if (_sortDirection != SortDirection.None) { for (int index = 0; index < count; index++) { Object curr = coll[index]; if (_sorter.Compare(curr, item) == (int)_sortDirection) return index; } } return count; }