У меня есть поле со списком, который отображает список доступных системных цветов. Каждый элемент в поле со списком имеет прямоугольник предварительного просмотра и название цвета текста. В определенный момент времени мне может понадобиться до 6 таких комбинированных списков на экране одновременно. Я создал статический список элементов для повторного использования во всех полях со списком, чтобы уменьшить накладные расходы. Это работает и работает быстро, но теперь, когда я изменяю другие свойства поля со списком, такие как установка веса шрифта жирным шрифтом, это влияет на все поля со списком, а не только на тот, к которому я применил свойство.
Вот мой код, все сделано в коде позади.
Объявление списка, который я использую, и поле со списком:
static private List<ListViewItem> _colorItems = null;
ComboBox _comboBoxColorList;
Затем в конструкторе для моего элемента управления, который содержит поле со списком, у меня есть код для первоначального создания списка:
if (_colorItems == null)
{
_colorItems = new List<ListViewItem>();
PropertyInfo[] colorProperties = typeof(Colors).GetProperties(BindingFlags.Static | BindingFlags.Public);
Dictionary<String, Color> colorDictionary = colorProperties.ToDictionary(p => p.Name, p => (Color)p.GetValue(null, null));
ListViewItem newItem;
foreach (KeyValuePair<String, Color> keyPair in colorDictionary)
{
newItem = CreateListViewItem(keyPair.Key, keyPair.Value);
_colorItems.Add(newItem);
}
}
Затем я создаю поле со списком:
_comboBoxColorList = new ComboBox();
_comboBoxColorList.Height = Constants.ListViewPropertyComboBoxHeight;
_comboBoxColorList.VerticalContentAlignment = VerticalAlignment.Center;
_comboBoxColorList.Background = Brushes.White;
_comboBoxColorList.ItemsSource = _colorItems;
_comboBoxColorList.SelectionChanged += new SelectionChangedEventHandler(comboBoxColorList_SelectionChanged);
Children.Add(_comboBoxColorList);
Затем, позже, в обработчике событий у меня есть этот код, чтобы установить поле со списком жирным шрифтом:
_comboBoxColorList.FontWeight = FontWeights.Bold;
Если я сделаю так, чтобы _colorItems не был статичным, все ведет себя как следует, но это медленно. Когда _colorItems статичен, он очень быстрый, но строка выше заставляет все поля со списком выделять полужирный источник элемента.
Любое понимание или мудрость были бы велики.