我的 wpf 应用程序中有一个矩形。矩形内还有一个 vertical 元素。
● 该垂直元素是可选的。
● 同时,该元素可以左右滑动,并在鼠标移动时显示测量值。
我使用 MouseDown 事件执行元素选择。
我使用 MouseMove 事件执行左右滚动。
但是这两个过程互相干扰。
当我用MouseDown选择元素时,它开始直接左右滚动。我想要的是在选择元素后 1 或 2 秒开始滚动。
我尝试过
Thread.Sleep(2000)
,但它在鼠标移动中无法正常工作。因为每次移动都会持续两秒。
以下是我的代码摘要。
public void MouseLeftButtonDownEvent(MouseButtonEventArgs e)
{
FrameworkElement canvas = (FrameworkElement)e.OriginalSource;
var dataCxtx = canvas.DataContext;
SelectElement(dataCtx,e);
}
public void MouseMove(MouseEventArgs mouseArgs)
{
if (_dragging && mouseArgs.LeftButton == MouseButtonState.Pressed)
{
//Wait for 2 seconds
Thread.Sleep(2000);
if (_draggingPolyNode != null)
{
PolygonNode pTemporary = AccessElements.GetTemporaryPolygon(Nodes);
if(DragTemporaryMullionElement(pTemporary,element, transform, mouseArgs))
DL.CreateTemporaryHDimension(tempDimensionStartX, tempDimensionEndX, mousePosition.X, middleOfMullion, Nodes[0].Transform);
}
}
}
您可以使用计时器将操作延迟特定的时间:
private DispatcherTimer ScrollDelayTimer { get; }
= new DispatcherTimer(
TimeSpan.FromSeconds(2),
DispatcherPriority.Background,
OnScrollDelayTimerElapsed,
Application.Current.Dispatcher);
private void OnScrollDelayTimerElapsed(object? sender, EventArgs e)
{
this.ScrollDelayTimer.Stop();
ScrollMarker();
}
private void ScrollMarker()
{
if (_draggingPolyNode != null)
{
PolygonNode pTemporary = AccessElements.GetTemporaryPolygon(Nodes);
if (DragTemporaryMullionElement(pTemporary,element, transform, mouseArgs))
{
DL.CreateTemporaryHDimension(tempDimensionStartX, tempDimensionEndX, mousePosition.X, middleOfMullion, Nodes[0].Transform);
}
}
}
public void MouseLeftButtonDownEvent(MouseButtonEventArgs e)
{
FrameworkElement canvas = (FrameworkElement)e.OriginalSource;
var dataCxtx = canvas.DataContext;
SelectElement(dataCtx,e);
}
public void MouseMove(MouseEventArgs mouseArgs)
{
if (_dragging && mouseArgs.LeftButton == MouseButtonState.Pressed)
{
// Wait for 2 seconds
this.ScrollDelayTimer.Start();
}
}