WPF : 슬라이더는 Mouseleftbuttondown 또는 Mouseleftbuttonup을 키우지 않습니다

StackOverflow https://stackoverflow.com/questions/160995

  •  03-07-2019
  •  | 
  •  

문제

나는이 xaml을 시도했다 :

<Slider Width="250" Height="25" Minimum="0" Maximum="1" MouseLeftButtonDown="slider_MouseLeftButtonDown" MouseLeftButtonUp="slider_MouseLeftButtonUp" />

그리고이 C#:

private void slider_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
sliderMouseDown = true;
}

private void slider_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
sliderMouseDown = false;
}

Mouseleftbuttondown 및 Mouseleftbuttonup 이벤트는 결코 높아지지 않기 때문에 SliderMousedown 변수는 변하지 않습니다. 사용자가 슬라이더에 왼쪽 마우스 버튼을 누르면 부울 값을 true로 설정하고 마우스가 올라가면 bool이 false로 설정되면 어떻게 작동하도록하려면 어떻게해야합니까?

도움이 되었습니까?

해결책

슬라이더는 Mousedown 이벤트를 삼킨다 (버튼과 유사).

슬라이더가 처리 할 기회가 있기 전에 발사되는 미리보기 세대 및 미리보기 이벤트에 등록 할 수 있습니다.

다른 팁

이를 수행하는 또 다른 방법 (및 시나리오에 따라 더 나은 방법)은 다음과 같은 절차 코드에 이벤트 핸들러를 등록하는 것입니다.

this.AddHandler
(
    Slider.MouseLeftButtonDownEvent,
    new MouseButtonEventHandler(slider_MouseLeftButtonDown),
    true
);

진정한 주장에 주목하십시오. 기본적으로 그 이벤트가 처리 된 것으로 표시되어 있어도 해당 이벤트를 받고 싶다고 말합니다. 불행히도, 이와 같은 이벤트 핸들러를 연결하는 것은 XAML이 아닌 절차 코드에서만 수행 할 수 있습니다.

다시 말해,이 방법을 사용하면 터널 터널 (따라서 다른 시간에 발생) 대신 일반 이벤트 (버블)에 대한 이벤트 핸들러를 등록 할 수 있습니다.

70 페이지의 파기 더 깊은 사이드 바를 참조하십시오 WPF는 해제되었습니다 더 많은 정보를 위해서.

lostmousecapture 및 gotmousecapture를 사용해보십시오.

    private void sliderr_LostMouseCapture(object sender, MouseEventArgs e)

    private void slider_GotMouseCapture(object sender, MouseEventArgs e)

사용자가 슬라이더를 드래그하기 시작하면 gotMousecapture가 발사되고, 방출 될 때 마우스 캡처를 잃어 버립니다.

나는 슬라이더가 전체 마우스 own 이벤트를 삼키지 않는다고 언급하고 싶습니다. 진드기 마크를 클릭하여, 당신 ~할 수 있다 이벤트에 대한 알림을 받으십시오. 슬라이더는 슬라이더의 슬라이더에서 나오지 않으면 마우스 own 이벤트를 처리하지 않습니다.

기본적으로 사용하기로 결정한 경우

AddHandler(Slider.MouseLeftButtonDownEvent, ..., true)

진드기가 켜져있는 버전은 이전에 이벤트가 처리되었는지 확인하십시오. 당신이하지 않으면 슬라이더가 클릭되었다고 생각한 가장자리 케이스로 끝나게 될 것입니다. 그러나 그것은 실제로 진드기였습니다. 미리보기 이벤트에 등록하는 것이 더 나쁩니다. 진드기 사이의 흰색 공간에서도 어디서나 이벤트를 선택할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top