Create UserControl DependencyProperty of which val

2019-08-19 03:43发布

问题:

I'm a starter at WPF, now i would like to make a WPF userControl library which include a Rating bar userControl. All the steps of creating the rating Bar has been done, however i would like to add a property RatingValue:

public static readonly DependencyProperty RatingValueProperty =
            DependencyProperty.Register("RatingValue", typeof(int), typeof(RatingControl),
            new FrameworkPropertyMetadata(0, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault, new PropertyChangedCallback(RatingValueChanged)));

public int RatingValue
        {
            get { return (int)GetValue(RatingValueProperty); }
            set
            {               
                SetValue(RatingValueProperty, value);                
            }
        }

private static void RatingValueChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e)
        {
         //... change the rating value
        }

that the user of my UserControl can modify by a value from 0 to 5 that are shown in a dropdown list (combo box) in the Properties windows (as some exist properties of Usercontrols like Visibility, windows style, background ...)

How can i do? Thank you very much in advance,

Viet

回答1:

  1. Create a class derived from TypeConverter.
  2. Override GetStandardValues and GetStandardValuesSupported (and optionally GetStandardValuesExclusive).
  3. From GetStandardValues, return a collection containing the values you want to appear in the combo box.
  4. Apply TypeConverterAttribute to the RatingValue property, specifying the type of your type converter.

Alternatively, depending on the semantics of RatingValue, you might consider making it an enum. This feels a bit weird because the values are numeric -- but it would have the advantage of constraining the values at a type level, and it would automatically give you a combo box with no need for you to implement a type converter.