我有一個組合框,顯示可用系統顏色的列表。組合框中的每個項目都有一個預覽矩形和文本顏色名稱。在給定的時間內,我可能需要一次在屏幕上多達6個組合框。我創建了一個項目的靜態列表,以便在所有組合框中重用以減少開銷。它起作用,而且速度很快,但現在當我更改其他組合框屬性時,例如將字體粗細設置爲粗體時,它會影響所有組合框,而不僅僅是我將屬性應用到的組合框。使用ItemsSource綁定的組合框會影響其他屬性
這是我的代碼,全部在代碼後面完成。
我重用列表的宣言和組合框:
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是靜態的時候速度非常快,但是上面的代碼行使所有的組合框共享item粗體。
任何洞察力或智慧都會很棒。
標籤不屬於標題,離開它... –
請將您的代碼發佈到您創建第二個組合框的位置。請張貼您如何附加事件處理程序和整個事件處理程序。 – Paparazzi