如何在WPF中通过大拇指的X乘法器来调整元素的大小
本文关键字:乘法器 元素 调整 大拇指 WPF | 更新日期: 2023-09-27 17:52:11
我使用Thumb
来调整元素的大小。在DragDelta
上,我用myElement.Width += e.HorizontalChange
。如果我想调整它的大小乘以100呢?
我尝试了myElement.Width += 100 * e.HorizontalChange
,但它导致元素"跳舞",当我拖动它。我认为这是因为大的变化导致了鼠标相对于元素位置的错误计算。
怎么做?
我录下了我得到的。我向右调整矩形的大小,你可以看到它是如何闪烁的。视频的重放速度很慢,但仍能看到闪烁。
看起来Thumb
计算的是相对于自身而不是相对于屏幕的HorizontalChange
。因此,如果拇指本身在拖动时不能准确地随鼠标移动,那么HorizontalChange
的值就不可靠。(另一个不受欢迎的行为的例子)
所以,Thumb
在实现自定义移动/调整大小行为时似乎有一点帮助。需要"手动"处理鼠标移动。尽管如此,我们仍然可以使用Thumb
的事件作为方便的点来处理鼠标。
FrameworkElement elementToResize;
double initialWidth;
Point initialMouse;
private void Thumb_DragStarted(object sender, DragStartedEventArgs e)
{
initialWidth = elementToResize.ActualWidth;
initialMouse = Mouse.GetPosition(Window.GetWindow((DependencyObject)sender));
}
private void Thumb_DragDelta(object sender, DragDeltaEventArgs e)
{
var horzChange = Mouse.GetPosition(Window.GetWindow((DependencyObject)sender)).X - initialMouse.X;
elementToResize.Width = initialWidth + 100 * Math.Round(horzChange / 100);
}
我们需要计算鼠标在屏幕坐标中的位置变化。这在WPF中并不简单。假设在拖动拇指时窗口没有在屏幕上移动,那么获取相对于窗口的鼠标位置将适用,如上面的代码所示。为了提高可靠性,您可以获得实际的鼠标屏幕坐标,但这需要从像素转换为与WPF设备无关的单位。