2011-06-11 15 views
0

我想让它使得当用户按住鼠标左键时,滑块控件出现在鼠标所在的位置,用户可以左右移动滑块控件。一旦鼠标左键被移除,它就会将该值传递给一个方法。我完全停留在此。我有内置的滑块控制,默认位置(位置可以变化)。在WPF上的TranslateTransform Slidercontrol

我曾尝试下面的代码获取滑块控件移动到鼠标的位置,但它没有做任何事情:

 private void Button_Click(object sender, RoutedEventArgs e) 
    { 
      TranslateTransform currentTransform = new TranslateTransform(); 
      currentTransform = slider.RenderTransform as TranslateTransform; 
      currentTransform.X = Mouse.GetPosition(Deck_Door).X; 
      currentTransform.Y = Mouse.GetPosition(Deck_Door).Y; 

     slider.Visibility = Visibility.Visible; 

    } 

提前感谢!

回答

0

我能够做到这一点很容易。我修改了代码,滑块包括用于translateTransform名称:

<Slider x:Name="slider" 
     TickFrequency="1" 
     Value="1" 
     IsSnapToTickEnabled="True" 
    IsMoveToPointEnabled="True" 
     Minimum="0" 
     Maximum="10" 
    ValueChanged="slider_ValueChanged" 
     AutoToolTipPlacement="BottomRight" 
     Grid.Column="0" VerticalAlignment="Top" Margin="0,-3,51.5,0" 
     Thumb.DragCompleted="slider_DragCompleted" > 
    <Slider.RenderTransform> 
     <TranslateTransform x:Name="mySliderTransform" /> 
    </Slider.RenderTransform> 
</Slider> 

然后我迷上一个click事件一个按钮,用下面的代码:

 private void Button_Click(object sender, RoutedEventArgs e) 
    { 
     slider.Visibility = Visibility.Visible; 
     slider.Value = 1; 

     // get the mouse positions 
     string x = Mouse.GetPosition(this).X.ToString(); 
     string y = Mouse.GetPosition(this).Y.ToString(); 

     // convert the mouse position to a double 
     var X = Convert.ToDouble(x); 
     var Y = Convert.ToDouble(y); 

     // reset the slider transform and apply the coordinates of the mouse position. 
     mySliderTransform.X = 0; 
     mySliderTransform.Y = 0; 
     mySliderTransform.X = X - 20; 
     mySliderTransform.Y = Y; 
    } 
0

首先,你应该捕捉鼠标
那么你应该计算鼠标移动距离

protected override void OnPreviewMouseLeftButtonDown(MouseButtonEventArgs e) 
{ 
    this.CaptureMouse(); 

    //Show slider here 
} 

protected override void OnPreviewMouseLeftButtonUp(MouseButtonEventArgs e) 
{ 
    this.ReleaseMouseCapture(); 

    //Hide slider here and get it's value 
} 

Point previousMousePosition; 

protected override void OnPreviewMouseMove(MouseEventArgs e) 
{ 
    if (this.IsMouseCaptured) 
    { 
     Point point = e.GetPosition(this); 

     double d = point.X - previousMousePosition.X; 

     //you can use this value to change the slider's value 

     this.previousMousePosition = point; 
    } 
} 
+0

@NavidRahmani嗨 - 这完全不是那么回事工作的权利。 OnPreviewMouseMove不会触发,除非我将鼠标移动很多,即使这样.IsMouseCaptured似乎总是返回false。此外,我没有看到这个代码如何将滑块移动到鼠标停留时鼠标所在的位置? – Stacey 2011-06-13 02:25:48

相关问题