2011-01-06 101 views
3

我正在處理內部使用組合框的自定義控件。C#WPF - 組合框

我的問題是,當組合框被關注並且下拉打開時,它似乎將焦點放在整個控件上。我想自動突出顯示掉落的第一個項目,但現在必須按下Down鍵才能這樣做。

有沒有辦法以編程方式突出顯示組合框中的第一個項目(將只讀IsHighlighted屬性設置爲true)?我相信ComboBox中的IsHighlight的概念與Focus不同。另外,我通過ItemsSource綁定,所以我沒有引用ComboBoxItems。

+0

所以你想要第一個項目突出顯示,而不是所選的項目? – Stefan 2011-01-06 22:35:45

+0

此時沒有選定的項目。當ComboBox被關注並且下拉菜單打開時,我需要突出顯示第一個ComboBoxItem,以便您可以使用下拉菜單中的向上/向下箭頭鍵。現在,您必須在第一個項目高亮顯示之前將其按下。 – jonathanpeppers 2011-01-06 23:53:24

+0

對不起,沒有記得combobox不需要有選定的項目,我總是有:-)嗯,一直在看它,但找不到解決方案。我試着發送關鍵筆畫,但即使這樣也行不通... – Stefan 2011-01-07 05:55:14

回答

3

這是一種做法,雖然它可能不包括所有情況 - 但你沒有提供太多的細節(例如,會發生什麼當你已經選擇了一個元素時,你還想要選擇列表中的第一個元素嗎?只有在組合框沒有選擇的時候,下面的代碼纔會突出顯示第一個元素,爲了使它始終選擇第一個元素,DropDownOpened事件也應該處理)。

public MainWindow() 
{ 
    InitializeComponent(); 
    combobox.ItemContainerGenerator.StatusChanged += new EventHandler(ItemContainerGenerator_StatusChanged); 
} 

void ItemContainerGenerator_StatusChanged(object sender, EventArgs e) 
{ 
    if (combobox.ItemContainerGenerator.Status == System.Windows.Controls.Primitives.GeneratorStatus.ContainersGenerated) 
    { 
     (combobox.ItemContainerGenerator.ContainerFromIndex(0) as ComboBoxItem).Focus(); 
    } 
} 

(希望我理解正確,這就是你想要做的)。

0

它可能不是你正在尋找的,但是如果你設置mycombo.SelectedIndex = 0,那麼mycombo.IsDropDownOpen = True它應該打開它並選擇第一個項目。它將突出顯示,但也將是組合框中的值。我不確定這是不是所期望的效果雖然..