Проблема реинициализации пользовательского элемента управления WPF - PullRequest
1 голос
/ 08 января 2011

Я работаю над стильным элементом управления ColorPicker, и он работает хорошо, но у меня проблемы с повторной инициализацией.

У меня DP под названием BaseBrushes, который выглядит так

public ObservableCollection<Brush> BaseBrushes
    {
        get { return (ObservableCollection<Brush>)GetValue(BaseBrushesProperty); }
        set { SetValue(BaseBrushesProperty, value); }
    }

    // Using a DependencyProperty as the backing store for BaseBrushes.  This enables animation, styling, binding, etc...
    public static readonly DependencyProperty BaseBrushesProperty =
        DependencyProperty.Register("BaseBrushes", typeof(ObservableCollection<Brush>), typeof(ColorPicker), new UIPropertyMetadata(new ObservableCollection<Brush>()));

и на сайте XAML, Я установил это так

<gc:ColorPicker Margin="0,15,0,0" SelectedBrush="#FF1E65C4" PaletteSize="6" StepSize="25">
   <gc:ColorPicker.BaseBrushes>
    <SolidColorBrush Color="Red"/>
    <SolidColorBrush Color="Blue"/>
    <SolidColorBrush Color="Orange"/>
    <SolidColorBrush Color="Green"/>
    <SolidColorBrush Color="Yellow"/>
    <SolidColorBrush Color="Black"/>
    <SolidColorBrush Color="White"/>
   </gc:ColorPicker.BaseBrushes>
  </gc:ColorPicker>

Моя проблема в том, что теперь, каждый раз, когда я открываю окно с этим ColorPicker, он снова добавляет все кисти в список, поэтому во втором представлении у меня есть 14 цветов, а не7.

Я могу очистить метод List in BeginInit (), но я не думаю, что это правильное решение.Я думаю, что это ненормальное поведение, поэтому я ничего не вижу.

Пожалуйста, если кто-нибудь знает что-нибудь, помогите мне

С наилучшими пожеланиями Дима

1 Ответ

0 голосов
/ 09 января 2011

Это потому, что в вашей реализации значение по умолчанию BaseBrushes является одним ObservableCollection. Сброс размера все еще не то, что вы хотите, потому что все ColorPickers будут по-прежнему использовать одну коллекцию BaseBrushes.

Вы можете просто создать новую пустую коллекцию для BaseBrushes в конструкторе ColorPicker:

BaseBrushes = new ObservableCollection<Brush>();

См. Раздел Написание свойств коллекции в этой статье для получения более подробной информации:

...