选择并滚动元素 WPF

问题描述 投票:0回答:1

我的 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);
                    
         }
      }
 }

c# wpf canvas mouseevent
1个回答
0
投票

您可以使用计时器将操作延迟特定的时间:

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();        
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.