/// <summary> /// Selects everything between SelectionStart and the given item. /// </summary> internal void MultiSelectTo(TreeListViewItem to) { if (SelectionStart == null) { return; } var from = SelectionStart; bool inRange = false; foreach (var item in this.EnumerateItems(i => i.IsExpanded)) { if (item == to || item == from) { if (inRange) { break; } else { inRange = true; } } else if (inRange) { item.IsMultiSelected = true; } } to.IsMultiSelected = true; from.IsMultiSelected = true; }
public static IEnumerable <TreeListViewItem> EnumerateChildren(this TreeListViewItem item, Func <TreeListViewItem, bool> walkChildren) { foreach (var child in item.Items) { var tvi = (TreeListViewItem)item.ItemContainerGenerator.ContainerFromItem(child); if (tvi != null) { yield return(tvi); if (walkChildren(tvi)) { foreach (var sub in EnumerateChildren(tvi, walkChildren)) { yield return(sub); } } } } }