/// <summary> /// Sets up stars when Value or NumberOfStars properties change /// Will only show up to the number of stars requested (up to Maximum) /// so if Value > NumberOfStars * 1, then Value is clipped to maximum /// number of full stars /// </summary> /// <param name="ratingControl"></param> private static void SetupStars(RatingControl ratingControl) { Decimal localValue = ratingControl.Value; ratingControl.spStars.Children.Clear(); for (int i = 0; i < ratingControl.NumberOfStars; i++) { StarControl star = new StarControl(); star.BackgroundColor = ratingControl.BackgroundColor; star.StarMaskColor = ratingControl.StarMaskColor; star.StarForegroundColor = ratingControl.StarForegroundColor; star.StarOutlineColor = ratingControl.StarOutlineColor; if (localValue > 1) { star.Value = 1.0m; } else if (localValue > 0) { star.Value = localValue; } else { star.Value = 0.0m; } localValue -= 1.0m; ratingControl.spStars.Children.Insert(i, star); } }
/// <summary> /// Handles changes to the NumberOfStars property. /// </summary> private static void OnNumberOfStarsChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { d.CoerceValue(MinimumProperty); d.CoerceValue(MaximumProperty); RatingControl ratingControl = (RatingControl)d; SetupStars(ratingControl); }
/// <summary> /// Handles changes to the StarMaskColor property. /// </summary> private static void OnStarMaskColorChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { RatingControl control = (RatingControl)d; foreach (StarControl star in control.spStars.Children) { star.StarMaskColor = (SolidColorBrush)e.NewValue; } }
/// <summary> /// Coerces the NumberOfStars value. /// </summary> private static object CoerceNumberOfStarsValue(DependencyObject d, object value) { RatingControl ratingControl = (RatingControl)d; Int32 current = (Int32)value; if (current < ratingControl.Minimum) { current = ratingControl.Minimum; } if (current > ratingControl.Maximum) { current = ratingControl.Maximum; } return(current); }
/// <summary> /// Coerces the Value value. /// </summary> private static object CoerceValueValue(DependencyObject d, object value) { RatingControl ratingControl = (RatingControl)d; Decimal current = (Decimal)value; if (current < ratingControl.Minimum) { current = ratingControl.Minimum; } if (current > ratingControl.Maximum) { current = ratingControl.Maximum; } return(current); }
/// <summary> /// Sets up stars when Value or NumberOfStars properties change /// Will only show up to the number of stars requested (up to Maximum) /// so if Value > NumberOfStars * 1, then Value is clipped to maximum /// number of full stars /// </summary> /// <param name="ratingControl"></param> private static void SetupStars(RatingControl ratingControl) { Decimal localValue = ratingControl.Value; ratingControl.spStars.Children.Clear(); for (int i = 0; i < ratingControl.NumberOfStars; i++) { StarControl star = new StarControl(); star.BackgroundColor = ratingControl.BackgroundColor; star.StarMaskColor = ratingControl.StarMaskColor; star.StarForegroundColor = ratingControl.StarForegroundColor; star.StarOutlineColor = ratingControl.StarOutlineColor; if (localValue > 1) star.Value = 1.0m; else if (localValue > 0) { star.Value = localValue; } else { star.Value = 0.0m; } localValue -= 1.0m; ratingControl.spStars.Children.Insert(i, star); } }