2014-10-14 3 views
1

오디오 파일의 위치를 ​​나타내는 슬라이더가 있습니다. 사용자가 슬라이더를 두 번 클릭하면 자동으로 재생됩니다.왜 LeftDoubleClick은 슬라이더에서 작동하지 않습니다.

내가 사용하는 경우이 :

<Slider.InputBindings> 
    <MouseBinding Gesture="LeftDoubleClick" Command="{Binding PlayCommand}" /> 
</Slider.InputBindings> 

명령이 호출되지 않습니다 놀이방. 내가 사용하는 경우,이 :

<Slider.InputBindings> 
    <MouseBinding Gesture="RightClick" Command="{Binding PlayCommand}" /> 
</Slider.InputBindings> 

또는이

<Slider HorizontalAlignment="Stretch" (...) MouseDoubleClick="slider1_MouseDoubleClick" > 
</Slider> 

연극 명령이 호출됩니다.

두 번 클릭으로 제스처를 사용하지 못하게하는 이유는 마우스 오른쪽 버튼 제스처 또는 두 번 클릭 이벤트를 호출 할 수있게 해줍니다.

+0

디자인 상으로 보입니다. Slider 컨트롤의 전체 템플릿 파일을 복사하고 대신 내부 Border를위한'InputBindings '을 넣어야합니다. 이 문제는 또한 ListViewItem과 같은 다른 많은 컨트롤에서도 발생할 수 있습니다 ... –

+0

흥미 롭습니다 ... 그 디자인 결정이 어디서 왔는지 궁금합니다. 이것은 다소 일반적인 UI 관용구 인 것 같습니다 ... –

+0

예, 사실 이상한 행동으로 쉽게 느끼지 못했습니다. 어떤 경우에는 버블 링 이벤트를 포착 할 수 없기 때문에 버블 링 이벤트를 처리 할 수 ​​없으며 터널링 이벤트 ('Preview' 접두사가 있음)를 처리해야합니다. 이 경우에는'MouseDoubleClick'을 잡을 수 있습니다 ('PreviewMouseDoubleClick'을 기대했습니다). 해당 마우스 바인딩 인'LeftDoubleClick'을 사용할 수 없습니다. –

답변

1

OK, 나는 내가 여기서 무슨 일이 일어나고 있는지 알아 냈어요 생각하십시오 Track

RepeatButtonMouseLeftButtonDown 이벤트를 차단하고 Handled = true을 설정하는 것입니다. MouseLeftButtonDown 이벤트는 오프 샷이 MouseDown이므로, Handled을 설정하면 실제로 둘 다 설정하는 것입니다. 이 경우, 마우스 다운 이벤트는 ClickCount = 1 일 때 처리되고, 이벤트를 Handled으로 표시하는 동작은 두 번째 클릭 (즉, ClickCount = 2)에서 이벤트 핸들러가 호출되는 것을 방지합니다. 입력 동작은 MouseDown 이벤트에서 평가되므로 두 번째 클릭에 대해 MouseDown 처리기를 억제하면 Slider이 입력 바인딩에 대해 검색되지 않으며 두 번 클릭 동작이있는 명령이 실행 기회를 얻지 못합니다.

두 번째 클릭 중에 마우스 다운 핸들러가 호출되지 않으면 왜 MouseDoubleClick 핸들러가 호출 되나요? 음, MouseDoubleClickControl의 클래스 수준 처리기에서 비롯되었으며 원래 마우스 다운 이벤트가 Handled으로 표시된 경우에도 해당 처리기는 으로 호출됩니다.

EventManager.RegisterClassHandler(
    typeof(Control), 
    UIElement.MouseLeftButtonDownEvent, 
    new MouseButtonEventHandler(HandleDoubleClick), 
    /* handledEventsToo: */ true); 

를 그리고 이렇게 MouseDoubleClick 이벤트는 LeftDoubleClick 입력이 수행 할 수있는 기회를 가진 적이 없어 바인딩 비록 제기됩니다 : 아래 RegisterClassHandler에 마지막 인수를합니다. 이것은 아마도 가장 직관적 인 행동이 아니며 의식적인 디자인 결정인지 또는 간단한 감독인지는 확실하지 않습니다.