2011-01-06 6 views
3

내부적으로 ComboBox를 사용하는 사용자 지정 컨트롤을 만들고 있습니다.C# WPF - ComboBox

내 문제는 ComboBox에 포커스가 있고 드롭 다운이 열려있는 경우 전체 컨트롤을 표시하는 것입니다. 익사 드롭의 첫 번째 항목을 자동으로 강조 표시하려고하지만 바로 지금하려면 아래쪽 키를 눌러야합니다.

프로그래밍 방식으로 ComboBox의 첫 번째 항목 강조 표시 (읽기 전용 IsHighlighted 속성을 true로 설정) 할 수 있습니까? 나는 ComboBox 내의 IsHighlight 개념이 Focus와는 다르다고 생각한다. 또한 ItemsSource를 통해 바인딩 중이므로 ComboBoxItems에 대한 참조가 없습니다.

+0

그래서 선택한 항목 대신 첫 번째 항목을 강조 표시 하시겠습니까? – Stefan

+0

현재 선택한 항목이 없습니다. ComboBox에 포커스가 있고 드롭 다운이 열려 있으면 드롭 다운 내에서 위/아래 화살표 키를 사용할 수 있도록 첫 번째 ComboBoxItem이 강조 표시되어 있어야합니다. 지금은 첫 번째 항목이 강조 표시되기 전에 아래로 내려야합니다. – jonathanpeppers

+0

아, 죄송합니다. 콤보 상자에 선택한 항목이 필요하지 않음을 기억하지 못했습니다. 항상 그렇습니다 :-) 잠깐 보았지만 해결 방법을 찾을 수 없습니다. 키 스트로크를 보내려고했는데 작동하지 않았다 ... – Stefan

답변

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

이 경우, 멤버 변수에 ComboBoxItem을 저장하고 적절한 경우에만 Focus를 호출합니다. 이제는 문제가 계속 발생하면 ScrollViewer가 자동으로 스크롤되지 않습니다. 이 코드를 제거하면 ScrollViewer가 의도 한대로 작동합니다. – jonathanpeppers

+0

정확히 언제 다운 키를 누르십니까? 드롭 다운 목록이 열렸습니까? 방금 테스트를 해봤는데 아무런 문제없이 스크롤을 눌러 내게 효과가있는 것 같습니다. 어쩌면 당신의 사건은 100 개의 문자열이 들어있는 단순한 콤보 박스보다 복잡할까요? –

+0

제 경우는 좀 더 복잡합니다. 결국 나는 당신의 해결책을 알아 냈을 것이라고 생각하지만, 당신을 대답으로 표시하고 있습니다. – jonathanpeppers

0

원하는 내용이 아닐 수도 있지만 mycombo.SelectedIndex = 0으로 설정하면 mycombo.IsDropDownOpen = True로 열리고 첫 번째 항목이 선택되어야합니다. 강조 표시되지만 콤보 상자의 값이기도합니다. 비록 이것이 원하는 효과가 아니 었는지 확실하지 않습니다.

+0

그래, ComboBox를 선택하지 말고 첫 번째 ComboBoxItem에 "포커스"/ "IsHighlight"만 있으면됩니다. – jonathanpeppers