2016-11-02 2 views
0

사용자가 키보드 화살표를 사용하여 항목을 탐색 할 때 사용자가 ComboBoxItem에있을 수있는 호버 상태를 제거하려고합니다. 그러나 사용자가 항목 위에 마우스를 올리면 마우스 오버 상태/선택 상태가이 항목으로 이동합니다.WPF - ComboBox 내에서 키보드를 사용할 때 호버 상태 제거

지금 재고 WPF ComboBox으로, 나는 서로 다른 조합을 가진 세 가지 상태가 있다는 것을 알았습니다 : 집중, 호버, 선택. 예를 들어, 다음 스크린 샷에서 item3은 선택된 것으로, item5은 마우스를 가리킨 상태이고 item7은 키보드 포커스가있는 것입니다.

enter image description here

나는 내 콤보 상자의 동작이 경우이

<!DOCTYPE html> 
 
<html> 
 
    <body> 
 
     <select> 
 
     <option value="Item1">Item #1</option> 
 
     <option value="Item2">Item #2</option> 
 
     <option value="Item3">Item #3</option> 
 
     <option value="Item4">Item #4</option> 
 
    </select> 
 
    </body> 
 
</html>

  • 나는 drowndown를 입력하면 "를 선택"(파란색처럼되고 싶어요) 값이 이미 선택되었습니다.
  • 항목 위에 마우스를 올리면이 항목이 "선택됨"항목이됩니다.
  • 거기에서 키보드의 화살표를 사용하면 마우스를 다시 움직일 때까지 "선택한"항목이 변경되고 마우스를 올린 상태의 항목이 없습니다.

VisualStatesTrigger을 Selected 및 MouseOver 상태에서 사용했지만 작동하지 않는 것 같습니다. 또한 확인하고 그것은 EventSetters 함께 할 수 있지만 어떤 EventComboBoxItem 맨 위에 마우스 mouvement 감지하려면 처리기를 연결할 수 있는지 모르겠습니다.

도움을 주셔서 감사합니다.

+1

콤보 상자 자체의 값이 업데이트되지 않으므로 HTML 예제에서 호버링은 요소를 실제로 선택하지 않습니다. – rucamzu

+0

네 말이 맞아. 값을 선택하지 않았지만 값을 클릭하거나 입력을 누르면 선택된 값으로 표시됩니다. 이것은 제가 바라는 행동이 될 것입니다. – EverydayLearner

답변

0

간단한 EventSetter로이 작업을 수행하는 방법을 발견했습니다.

<EventSetter Event="MouseMove" Handler="ComboBoxItemStyle_OnMouseMove" /> 

이 이벤트 세터

은 내 ComboBoxItem의 스타일에 직접 적용된다. 다음은이 이벤트 핸들러의 코드는 다음과 같습니다

private void ComboBoxItemStyle_OnMouseMove(object sender, MouseEventArgs e) 
{ 
    var hoveredItem = sender as ComboBoxItem; 
    hoveredItem?.Focus(); 
} 

ComboBoxItem 또한 True에 재산 OverrideDefaultStyle을 가지고 있으며, 따라서 내가 떴다가 집중하고 선정 할 때 ComboBoxItems가 표시되는 방식을 설정할 수 있습니다. 이 작업을 수행하기 위해 항목 템플릿에 VisualStates를 사용하기로 결정했습니다.

항목이 Focused 상태 일 때, 을 원했던 색상으로 Foreground으로 설정했습니다. 나는 또한 Selected 상태와 동일하게했다. MouseMove 이벤트는 현재 표시된 항목을 집중된 항목으로 설정하므로 상태가 시작되고 이에 따라 스타일이 설정됩니다.

0

나는이 목표임을 확실하지,하지만 당신이 원하는 경우에 그것을 볼 수있는 시도해 :

당신은 콤보 상자가 ItemsSource 행 수 있었다
<ComboBox Height="50" Width="100" HorizontalAlignment="Left" VerticalAlignment="Top" 
       IsEditable="False"> 
     <ComboBox.Resources> 
      <Style TargetType="ComboBoxItem"> 
       <Setter Property="IsSelected" Value="{Binding RelativeSource={RelativeSource Self}, Path=IsFocused, Mode=OneWay}"/> 
      </Style> 
     </ComboBox.Resources> 
     <ComboBoxItem Content="Items 1" /> 
     <ComboBoxItem Content="Items 2" /> 
     <ComboBoxItem Content="Items 3" /> 
     <ComboBoxItem Content="Items 4" /> 
    </ComboBox> 

, 그것은 문제시하지 않습니다 ComboboxItems가 있습니다.

+0

이것은 어떤면에서 도움이됩니다. 그러나 선택한 요소에 바인딩하여, 내가 맴돌면이 요소가 선택되고 ComboBox에서 클릭하면이 요소 중 하나를 선택하지 않았더라도이 요소가 선택됩니다. – EverydayLearner

+0

그래서 실제로 ComboBoxItem의 IsHighlighted 속성을 찾고 있습니다. 키보드를 사용할 때는 True로 설정해야합니다. 문제는 프레임 워크> 3.0을 목표로한다면 그렇게 할 수 없다는 것입니다 ([url] (https://msdn.microsoft.com/en-us/library/system.windows.controls.comboboxitem.ishighlighted (v = vs.110) .aspx) 당신이 할 수있는 일은 콤보 박스가 제공하는 것이 아닌 사용자 지정 하이라이트 메커니즘을 만드는 것입니다. 원하는 경우이 제안에 대한 솔루션을 게시 할 수 있습니다. –

+0

대답에 대답하지 않겠습니다. IsHighlighted 속성과 함께. 뭔가를 발견했지만 어쩌면 당신 것이 더 낫다! – EverydayLearner