/// <summary> /// Called when a new item container is materialized, to set its selected state. /// </summary> /// <param name="sender">The event sender.</param> /// <param name="e">The event args.</param> private void ContainerMaterialized(object sender, ItemContainerEventArgs e) { var selectedItem = SelectedItem; if (selectedItem != null) { foreach (var container in e.Containers) { if (container.Item == selectedItem) { ((TreeViewItem)container.ContainerControl).IsSelected = true; if (AutoScrollToSelectedItem) { DispatcherTimer.RunOnce( container.ContainerControl.BringIntoView, TimeSpan.Zero); } break; } } } }
private void TreeViewItemMaterialized(object sender, ItemContainerEventArgs e) { var item = (TreeViewItem)e.Containers[0].ContainerControl; item.TemplateApplied += TreeViewItemTemplateApplied; }
/// <summary> /// Called when containers are dematerialized for the <see cref="ItemsControl"/> by its /// <see cref="ItemContainerGenerator"/>. /// </summary> /// <param name="e">The details of the containers.</param> protected virtual void OnContainersDematerialized(ItemContainerEventArgs e) { var toRemove = new List<ILogical>(); foreach (var container in e.Containers) { // If the item is its own container, then it will be removed from the logical tree // when it is removed from the Items collection. if (container.ContainerControl != container.Item) { toRemove.Add(container.ContainerControl); } } LogicalChildren.RemoveAll(toRemove); }
/// <inheritdoc/> protected override void OnContainersMaterialized(ItemContainerEventArgs e) { base.OnContainersMaterialized(e); var selectedIndex = SelectedIndex; var selectedContainer = e.Containers .FirstOrDefault(x => (x.ContainerControl as ISelectable)?.IsSelected == true); if (selectedContainer != null) { SelectedIndex = selectedContainer.Index; } else if (selectedIndex >= e.StartingIndex && selectedIndex < e.StartingIndex + e.Containers.Count) { var container = e.Containers[selectedIndex - e.StartingIndex]; if (container.ContainerControl != null) { MarkContainerSelected(container.ContainerControl, true); } } }
/// <summary> /// Called when new containers are materialized for the <see cref="ItemsControl"/> by its /// <see cref="ItemContainerGenerator"/>. /// </summary> /// <param name="e">The details of the containers.</param> protected virtual void OnContainersMaterialized(ItemContainerEventArgs e) { var toAdd = new List<ILogical>(); foreach (var container in e.Containers) { // If the item is its own container, then it will be added to the logical tree when // it was added to the Items collection. if (container.ContainerControl != container.Item) { toAdd.Add(container.ContainerControl); } } LogicalChildren.AddRange(toAdd); }