/// <summary> /// When overridden in a derived class, returns a <see cref="DataTemplate"/> based on custom logic. /// </summary> /// <param name="item">The data object for which to select the template.</param> /// <param name="container">The data-bound object.</param> /// <returns> /// Returns a <see cref="DataTemplate"/> or null. The default value is null. /// </returns> public override DataTemplate SelectTemplate(object item, DependencyObject container) { var group = item as CollectionViewGroup; if (group != null && group.IsBottomLevel) { var itemsControl = container.FindAncestor<ItemsControl>(); if (itemsControl != null) { var collectionView = itemsControl.Items as ICollectionView; if (collectionView != null && collectionView.Groups.Count > 0 && !group.Equals(collectionView.Groups[0])) { return this.SeparatorTemplate; } } } return this.EmptyTemplate; }
private static void SmoothDownPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { ButtonBase container = d as ButtonBase; if (container == null) return; Nullable<double> newvalue = (Nullable<double>)e.NewValue; ScrollViewer sv = d.FindAncestor<ScrollViewer>(); if (sv == null) return; if (newvalue != null) { container.Command = RelayCommand.Instanciate(() => { SmoothDownPropertyChangedAction(sv, newvalue.Value); }); } else { container.Command = null; } }