【发布时间】:2011-12-06 02:29:31
【问题描述】:
我有一个显示可用系统颜色列表的组合框。组合框中的每个项目都有一个预览矩形和文本颜色名称。在给定的时间,我可能一次需要在屏幕上显示多达 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 为静态时,它非常快,但上面的行使所有组合框都共享项目源粗体。
任何洞察力或智慧都会很棒。
【问题讨论】:
-
标签不属于标题,留下它...
-
请在您创建第二个组合框的位置发布代码。请发布您如何附加事件处理程序和整个事件处理程序。
标签: wpf binding combobox properties