Создать UserControl DependencyProperty, значение которого можно выбрать в раскрывающемся списке (как поле со списком) - PullRequest
0 голосов
/ 18 марта 2010

Я новичок в WPF, теперь я хотел бы создать библиотеку WPC userControl, которая включает в себя панель UserControl в строке рейтинга. Все шаги по созданию рейтинговой панели уже выполнены, но я бы хотел добавить свойство 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
        }

что пользователь моего UserControl может изменить значение от 0 до 5, которое отображается в раскрывающемся списке (поле со списком) в окнах свойств (поскольку существуют некоторые свойства пользовательских элементов управления, такие как видимость, стиль окон, фон ... )

Как я могу это сделать? Заранее большое спасибо,

Вьет

1 Ответ

0 голосов
/ 18 марта 2010
  1. Создать класс, производный от TypeConverter.
  2. Переопределить GetStandardValues ​​и GetStandardValuesSupported (и дополнительно GetStandardValuesExclusive).
  3. Из GetStandardValues ​​верните коллекцию, содержащую значения, которые вы хотите отобразить в поле со списком.
  4. Примените TypeConverterAttribute к свойству RatingValue, указав тип вашего преобразователя типов.

В качестве альтернативы, в зависимости от семантики RatingValue, вы можете сделать это перечислением. Это выглядит немного странно, потому что значения являются числовыми, но было бы полезно ограничить значения на уровне типа, и это автоматически предоставило бы вам поле со списком без необходимости реализации преобразователя типа.

...