WPF의 Button 컨트롤에서 끌어서 놓기를 시작하려고합니다. 클릭 이벤트도 처리하고 싶기 때문에 Button을 사용하고 있습니다.
XAML에 버튼을 추가하고 항상 MouseMove 이벤트를 처리하는 것은이 e.LeftMouse
같음을 MouseButtonState.Released
.
<Button MouseMove="Button_MouseMove"/>
다음 핸들러 구현에서는 예외가 발생하지 않습니다.
private void Button_MouseMove(object sender, MouseEventArgs e)
{
if (e.LeftButton == MouseButtonState.Pressed)
throw new Exception("It works!");
}
Button 내부에 배치하고 MouseMove 이벤트를 처리하려고 시도하는 모든 컨트롤에 대해서도 동일하다는 것을 알았습니다.
Button 컨트롤 또는 WPF의 버튼 내부에있는 다른 컨트롤에서 끌어서 놓기를 어떻게 처리합니까?
편집-mm8의 답변을 기반으로 한 솔루션
업데이트 된 XAML은 다음과 같습니다.
<Button PreviewMouseDown="Button_PreviewMouseDown"
PreviewMouseUp="Button_PreviewMouseUp"
PreviewMouseMove="Button_PreviewMouseMove">
</Button>
업데이트 된 핸들러 코드 :
Point startPosition;
double delta = 10;
private void Button_PreviewMouseDown(object sender, MouseButtonEventArgs e)
{
e.Handled = true;
startPosition = e.GetPosition(this);
}
private void Button_PreviewMouseUp(object sender, MouseButtonEventArgs e)
{
Point currentPosition = e.GetPosition(this);
if ((currentPosition - startPosition).Length < delta)
throw new Exception("MouseClick");
}
private void Button_PreviewMouseMove(object sender, MouseEventArgs e)
{
Point currentPosition = e.GetPosition(this);
double currentDelta = (currentPosition - startPosition).Length;
if (e.LeftButton == MouseButtonState.Pressed && currentDelta >= delta)
throw new Exception("DragAndDrop");
}
PreviewMouseDown
대신 이벤트를 처리 할 수 있습니다 Click
.
private void Button_Click(object sender, MouseButtonEventArgs e)
{
//handle click here...
e.Handled = true;
}
XAML :
<Button PreviewMouseDown="Button_Click" MouseMove="Button_MouseMove"/>
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다