/// <summary> /// Each time a property change, we have to reposition /// </summary> private static void OnCarouselPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { if (e.NewValue == null) { return; } Carousel carouselControl = (Carousel)d; if (e.Property == SelectedIndexProperty) { var newValue = carouselControl.Items[(int)e.NewValue]; var oldValue = e.OldValue == null ? null : carouselControl.Items.ElementAtOrDefault((int)e.OldValue); carouselControl.FocusContainerFromIndex((int)e.NewValue); // double check if (carouselControl.SelectedItem != newValue) { carouselControl.SetValue(SelectedItemProperty, newValue); var newValues = new List <object>() { newValue }; var oldValues = oldValue == null ? new List <object>() : new List <object>() { oldValue }; var args = new SelectionChangedEventArgs(oldValues, newValues); carouselControl.SelectionChanged?.Invoke(carouselControl, args); return; } } else if (e.Property == SelectedItemProperty) { var index = carouselControl.Items.IndexOf(e.NewValue); // double check if (carouselControl.SelectedIndex != index) { carouselControl.SetValue(SelectedIndexProperty, index); var newValues = new List <object>() { e.NewValue }; var oldValues = e.OldValue == null ? new List <object>() : new List <object>() { e.OldValue }; var args = new SelectionChangedEventArgs(oldValues, newValues); carouselControl.SelectionChanged?.Invoke(carouselControl, args); return; } } carouselControl.UpdatePositions(); }
/// <summary> /// Each time a property change, we have to reposition /// </summary> private static void OnCarouselPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { if (e.NewValue == null) { return; } Carousel carouselControl = (Carousel)d; if (e.Property == SelectedIndexProperty) { var item = carouselControl.Items[(int)e.NewValue]; carouselControl.FocusContainerFromIndex((int)e.NewValue); // double check if (carouselControl.SelectedItem != item) { carouselControl.SetValue(SelectedItemProperty, item); return; } } else if (e.Property == SelectedItemProperty) { var index = carouselControl.Items.IndexOf(e.NewValue); // double check if (carouselControl.SelectedIndex != index) { carouselControl.SetValue(SelectedIndexProperty, index); return; } } carouselControl.UpdatePositions(); }