/// <summary> /// Updates a cascading list boxes visibility. /// </summary> /// <param name="item">The sliding list box.</param> internal void UpdateListVisibility(DependencyObject item) { ISplitItemsControl splitItemsControl = item as ISplitItemsControl; if (splitItemsControl != null && this.containersBySplitItemsControl.ContainsKey(splitItemsControl)) { this.containersBySplitItemsControl[splitItemsControl].Visibility = CascadingListBoxGroup.GetListVisibility(item); } }
/// <summary> /// Override for clearing a container. /// </summary> /// <param name="element">The element dependency object.</param> /// <param name="item">The item object.</param> protected override void ClearContainerForItemOverride(DependencyObject element, object item) { base.ClearContainerForItemOverride(element, item); this.containersByItem.Remove(item); ISplitItemsControl splitItemsControl = item as ISplitItemsControl; if (splitItemsControl == null) { FrameworkElement frameworkElement = item as FrameworkElement; if (frameworkElement != null && !string.IsNullOrEmpty(CascadingListBoxGroup.GetCascadingListBoxName(frameworkElement))) { splitItemsControl = frameworkElement.FindName(CascadingListBoxGroup.GetCascadingListBoxName(frameworkElement)) as ISplitItemsControl; } } if (splitItemsControl != null) { this.containersBySplitItemsControl.Remove(splitItemsControl); } }
/// <summary> /// Override for preparing the container. /// </summary> /// <param name="element">The element dependency object.</param> /// <param name="item">The item object.</param> protected override void PrepareContainerForItemOverride(DependencyObject element, object item) { base.PrepareContainerForItemOverride(element, item); ContentPresenter container = element as ContentPresenter; this.containersByItem.Add(item, container); DependencyObject dependencyObject = item as DependencyObject; if (dependencyObject != null) { CascadingListBoxGroup.SetCascadingListBoxGroup(dependencyObject, this); LinkingWrapPanel.SetIsLinkedToNextChild(container, LinkingWrapPanel.GetIsLinkedToNextChild(dependencyObject)); this.UpdateListVisibility(dependencyObject); } #if SILVERLIGHT Canvas.SetZIndex(container, this.Items.Count - this.Items.IndexOf(item)); #endif ISplitItemsControl splitItemsControl = item as ISplitItemsControl; if (splitItemsControl == null) { FrameworkElement frameworkElement = item as FrameworkElement; if (frameworkElement != null && !string.IsNullOrEmpty(CascadingListBoxGroup.GetCascadingListBoxName(frameworkElement))) { splitItemsControl = frameworkElement.FindName(CascadingListBoxGroup.GetCascadingListBoxName(frameworkElement)) as ISplitItemsControl; } } if (splitItemsControl != null) { CascadingListBoxGroup.SetCascadingListBoxGroup(splitItemsControl as DependencyObject, this); this.containersBySplitItemsControl.Add(splitItemsControl, container); } }
/// <summary> /// Updates the items source of a split items control. /// </summary> /// <param name="splitItemsControl">The split items control.</param> public static void UpdateItemsSource(ISplitItemsControl splitItemsControl) { #if !SILVERLIGHT if (System.ComponentModel.DesignerProperties.GetIsInDesignMode(splitItemsControl as DependencyObject)) { return; } #endif List<object> items = new List<object>(); if (splitItemsControl.PrimaryItemsSource != null) { items.AddRange(IEnumerableHelper.GetItems(splitItemsControl.PrimaryItemsSource)); if (items.Count > 0) { for (int i = 0; i < items.Count; i++) { if (splitItemsControl.PrimaryItemsSourceHeader != null) { splitItemsControl.AddItemHeader(items[i], null); } if (splitItemsControl.AddShortcutKeysToPrimaryItems && i <= 10) { splitItemsControl.AddItemShortcutKey(items[i], ShortcutKeyHelper.GetKeyFromIndex(i)); } else { splitItemsControl.RemoveItemShortcutKey(items[i], ShortcutKeyHelper.GetKeyFromIndex(i)); } splitItemsControl.RemoveItemSplit(items[i]); } splitItemsControl.AddItemHeader(items[0], splitItemsControl.PrimaryItemsSourceHeader); } } if (splitItemsControl.SecondaryItemsSource != null) { if (items.Count > 0) { splitItemsControl.AddItemSplit(items[items.Count - 1]); } int itemCount = items.Count; items.AddRange(IEnumerableHelper.GetItems(splitItemsControl.SecondaryItemsSource)); if (splitItemsControl.SecondaryItemsSourceHeader != null && items.Count > itemCount) { for (int i = itemCount; i < items.Count; i++) { splitItemsControl.AddItemHeader(items[i], null); splitItemsControl.RemoveItemSplit(items[i]); } splitItemsControl.AddItemHeader(items[itemCount], splitItemsControl.SecondaryItemsSourceHeader); } } if (splitItemsControl.ShowCustomValueOption && splitItemsControl.CustomValueItem != null) { if (items.Count > 0) { splitItemsControl.AddItemSplit(items[items.Count - 1]); } items.Add(splitItemsControl.CustomValueItem); } if (splitItemsControl.OtherItemsSource != null && splitItemsControl.ShowOtherItems) { if (items.Count > 0) { splitItemsControl.AddItemSplit(items[items.Count - 1]); } int itemCount = items.Count; items.AddRange(IEnumerableHelper.GetItems(splitItemsControl.OtherItemsSource)); if (splitItemsControl.OtherItemsSourceHeader != null && items.Count > itemCount) { for (int i = itemCount; i < items.Count; i++) { splitItemsControl.AddItemHeader(items[i], null); splitItemsControl.RemoveItemSplit(items[i]); } splitItemsControl.AddItemHeader(items[itemCount], splitItemsControl.OtherItemsSourceHeader); } } else if (splitItemsControl.ShowOtherOption) { if (items.Count > 0) { splitItemsControl.AddItemSplit(items[items.Count - 1]); } items.Add(splitItemsControl.OtherItem); } splitItemsControl.ItemsSource = items; #if !SILVERLIGHT if (splitItemsControl is SplitComboBox) { object selectedItem = null; foreach (object item in items) { SplitComboBoxItem splitComboBoxItem = item as SplitComboBoxItem; if (splitComboBoxItem != null && splitComboBoxItem.IsSelected) { selectedItem = item; break; } } if (selectedItem != null) { splitItemsControl.SelectedItem = selectedItem; } } #endif }
/// <summary> /// Updates the items source of a split items control. /// </summary> /// <param name="splitItemsControl">The split items control.</param> public static void UpdateItemsSource(ISplitItemsControl splitItemsControl) { #if !SILVERLIGHT if (System.ComponentModel.DesignerProperties.GetIsInDesignMode(splitItemsControl as DependencyObject)) { return; } #endif List <object> items = new List <object>(); if (splitItemsControl.PrimaryItemsSource != null) { items.AddRange(IEnumerableHelper.GetItems(splitItemsControl.PrimaryItemsSource)); if (items.Count > 0) { for (int i = 0; i < items.Count; i++) { if (splitItemsControl.PrimaryItemsSourceHeader != null) { splitItemsControl.AddItemHeader(items[i], null); } if (splitItemsControl.AddShortcutKeysToPrimaryItems && i <= 10) { splitItemsControl.AddItemShortcutKey(items[i], ShortcutKeyHelper.GetKeyFromIndex(i)); } else { splitItemsControl.RemoveItemShortcutKey(items[i], ShortcutKeyHelper.GetKeyFromIndex(i)); } splitItemsControl.RemoveItemSplit(items[i]); } splitItemsControl.AddItemHeader(items[0], splitItemsControl.PrimaryItemsSourceHeader); } } if (splitItemsControl.SecondaryItemsSource != null) { if (items.Count > 0) { splitItemsControl.AddItemSplit(items[items.Count - 1]); } int itemCount = items.Count; items.AddRange(IEnumerableHelper.GetItems(splitItemsControl.SecondaryItemsSource)); if (splitItemsControl.SecondaryItemsSourceHeader != null && items.Count > itemCount) { for (int i = itemCount; i < items.Count; i++) { splitItemsControl.AddItemHeader(items[i], null); splitItemsControl.RemoveItemSplit(items[i]); } splitItemsControl.AddItemHeader(items[itemCount], splitItemsControl.SecondaryItemsSourceHeader); } } if (splitItemsControl.ShowCustomValueOption && splitItemsControl.CustomValueItem != null) { if (items.Count > 0) { splitItemsControl.AddItemSplit(items[items.Count - 1]); } items.Add(splitItemsControl.CustomValueItem); } if (splitItemsControl.OtherItemsSource != null && splitItemsControl.ShowOtherItems) { if (items.Count > 0) { splitItemsControl.AddItemSplit(items[items.Count - 1]); } int itemCount = items.Count; items.AddRange(IEnumerableHelper.GetItems(splitItemsControl.OtherItemsSource)); if (splitItemsControl.OtherItemsSourceHeader != null && items.Count > itemCount) { for (int i = itemCount; i < items.Count; i++) { splitItemsControl.AddItemHeader(items[i], null); splitItemsControl.RemoveItemSplit(items[i]); } splitItemsControl.AddItemHeader(items[itemCount], splitItemsControl.OtherItemsSourceHeader); } } else if (splitItemsControl.ShowOtherOption) { if (items.Count > 0) { splitItemsControl.AddItemSplit(items[items.Count - 1]); } items.Add(splitItemsControl.OtherItem); } splitItemsControl.ItemsSource = items; #if !SILVERLIGHT if (splitItemsControl is SplitComboBox) { object selectedItem = null; foreach (object item in items) { SplitComboBoxItem splitComboBoxItem = item as SplitComboBoxItem; if (splitComboBoxItem != null && splitComboBoxItem.IsSelected) { selectedItem = item; break; } } if (selectedItem != null) { splitItemsControl.SelectedItem = selectedItem; } } #endif }