C# WPF滑块控件上的TranslateTransform
我正在尝试这样做,当用户按住鼠标左键时,滑块控件显示在鼠标所在的位置,用户可以向左/向右移动滑块控件。删除鼠标左键后,它将把值传递给一个方法。我完全被这件事缠住了。我有一个内置的滑块控件,带有一个默认位置(位置可以变化) 我已尝试使用以下代码使滑块控件移动到鼠标位置,但它没有任何作用:C# WPF滑块控件上的TranslateTransform,c#,wpf,slider,C#,Wpf,Slider,我正在尝试这样做,当用户按住鼠标左键时,滑块控件显示在鼠标所在的位置,用户可以向左/向右移动滑块控件。删除鼠标左键后,它将把值传递给一个方法。我完全被这件事缠住了。我有一个内置的滑块控件,带有一个默认位置(位置可以变化) 我已尝试使用以下代码使滑块控件移动到鼠标位置,但它没有任何作用: private void Button_Click(object sender, RoutedEventArgs e) { TranslateTransform cur
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;
}
提前谢谢 首先您应该捕获鼠标
然后您应该计算鼠标移动距离
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;
}
}
我可以很容易地做到这一点。我修改了滑块代码以包含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>
嗨@NavidRahmani-这不太合适。除非我经常移动鼠标,否则OnPreviewMouseMove不会触发,即使如此,this.IsMouseCaptured似乎总是返回false。另外,我看不到这段代码如何在鼠标左键按下时将滑块移动到鼠标所在位置的下方?
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;
}