2013-06-25 4 views
4

마우스 위치에 따라 버튼을 이동하려했지만 버튼을 움직이면 깜박입니다. 아래의 코드를 XAML의 코드 아래wpf 버튼을 마우스 위치에 따라 이동했지만 깜박임

 <Button Name="Samplebutton" 
       PreviewMouseDown="Samplebutton_PreviewMouseDown" 
       PreviewMouseUp="Samplebutton_PreviewMouseUp" 
       PreviewMouseMove="Samplebutton_PreviewMouseMove" 
       Content="Moving" Width="100" Height="35"/> 

CS,

private bool m_IsPressed = false; 

    private void Samplebutton_PreviewMouseDown(object sender, MouseButtonEventArgs e) 
    { 
     if (e.ChangedButton == MouseButton.Left) 
     { 
      m_IsPressed = true; 
     } 
     else 
     { 
      m_IsPressed = false; 
     } 
    } 

    private void Samplebutton_PreviewMouseUp(object sender, MouseButtonEventArgs e) 
    { 
     m_IsPressed = false; 
    } 

    private void Samplebutton_PreviewMouseMove(object sender, MouseEventArgs e) 
    { 
     if (m_IsPressed) 
     { 
      TranslateTransform transform = new TranslateTransform(); 
      transform.X = Mouse.GetPosition(sender as Button).X; 
      transform.Y = Mouse.GetPosition(sender as Button).Y; 
      this.Samplebutton.RenderTransform = transform; 
     } 
    } 

제안을 제공하시기 바랍니다 중 하나를 찾아주세요?

답변

3

"깜박임"은 PreviewMouseMove 처리기의 변환으로 인해 발생합니다.

버튼 컨트롤을 기준으로 마우스의 위치를 ​​사용하여 컨트롤의 X 및 Y 위치를 변형합니다.이 위치는 변형이 적용될 때마다 변경됩니다. 단추 위치가 변경 될 때마다 Mouse.GetPosition(sender as Button).X & Y이 다른 값을 반환하므로 단추의 위치가 다시 변경되는 등의 문제가 있습니다. 이 약

한 가지 방법은 (고정 된 위치로 예를 들어 Grid, Canvas을) 부모 요소에서 마우스 위치를 얻을 수있을 것입니다 :

<Grid Name="myGrid"> 
    <Button Name="Samplebutton" 
      PreviewMouseDown="Samplebutton_PreviewMouseDown" 
      PreviewMouseUp="Samplebutton_PreviewMouseUp" 
      PreviewMouseMove="Samplebutton_PreviewMouseMove" 
      Content="Moving" Width="100" Height="35"/> 
</Grid> 

private void Samplebutton_PreviewMouseMove(object sender, MouseEventArgs e) 
    { 
     if (m_IsPressed) 
     { 
      TranslateTransform transform = new TranslateTransform(); 
      transform.X = Mouse.GetPosition(myGrid).X; 
      transform.Y = Mouse.GetPosition(myGrid).Y; 
      this.Samplebutton.RenderTransform = transform; 
     } 
    } 

이되지 않습니다 세계에서 가장 예쁜 것입니다. 왼쪽 상단에서 버튼을 "잡아"나오기 때문에 원하는 동작을 얻기 위해 위치를 조정할 수 있습니다.

행운을 비네.

편집 :

transform.X = Mouse.GetPosition((sender as Button).Parent as FrameworkElement).X; 
+0

: 당신이 명시 적으로 상대적인 위치에 사용하고자하는 요소의 이름을 지정하지 않으려면 sender 객체를 조회하여 바로 위 부모를 선택할 수 있어야 고마워. 내가 확인하고 알려 줄거야. – Muthalagu

1
private void button_PreviewMouseDown_1(object sender, MouseButtonEventArgs e) 
    { 
     button.CaptureMouse(); 
    } 

    private void button_PreviewMouseUp_1(object sender, MouseButtonEventArgs e) 
    { 
     button.ReleaseMouseCapture(); 
    } 

    private void button_PreviewMouseMove_1(object sender, MouseEventArgs e) 
    { 

     if (button.IsMouseCaptured) 
     { 
      Canvas.SetLeft(button, e.GetPosition(this).X); 
      Canvas.SetTop(button, e.GetPosition(this).Y); 

     } 
    } 
+0

시도해 주셔서 감사합니다.하지만 Canvas에서이 사실을 알고 싶지는 않습니다. – Muthalagu

관련 문제