diff --git a/GraphPage.xaml.cs b/GraphPage.xaml.cs index fa54ec3..19bf12e 100644 --- a/GraphPage.xaml.cs +++ b/GraphPage.xaml.cs @@ -10,6 +10,8 @@ namespace NotesDataAnalyst private PointF _initialNodePosition; // Хранит начальную позицию ноды private PointF _initialTouchPosition; // Хранит начальную позицию касания private SizeF _initialNodeSize; // Хранит начальный размер ноды + private DateTime tapStartTime; + private const int longPressDuration = 3000; // 3 секунды в миллисекундах private readonly List _nodes = new(); private readonly List _connections = new(); @@ -34,6 +36,48 @@ namespace NotesDataAnalyst var tapGesture = new TapGestureRecognizer(); tapGesture.Tapped += OnCanvasTapped; canvasView.GestureRecognizers.Add(tapGesture); + + var tapGestureRecognizer = new TapGestureRecognizer(); + tapGestureRecognizer.Tapped += OnTapped; + canvasView.GestureRecognizers.Add(tapGestureRecognizer); + } + + + private void OnTapped(object sender, EventArgs e) + { + tapStartTime = DateTime.Now; + + Device.StartTimer(TimeSpan.FromMilliseconds(longPressDuration), () => + { + if ((DateTime.Now - tapStartTime).TotalMilliseconds >= longPressDuration) + { + // Здесь выполняется действие при длительном нажатии + OnNodeLongPressed(); + } + return false; // Останавливаем таймер + }); + } + + private void OnNodeLongPressed() + { + if (_selectedNode != null) + { + // Добавляем дочернюю ноду рядом с активной + var childNode = new GraphNode + { + Text = "Дочерняя нода", + Position = new Point(_selectedNode.Position.X + 50, _selectedNode.Position.Y + 50), + Size = new Size(150, 100) + }; + + _nodes.Add(childNode); + _connections.Add(new GraphConnection { FromNode = _selectedNode, ToNode = childNode }); + + canvasView.Invalidate(); // Перерисовываем + } + + // Здесь реализуйте действие при длительном нажатии + // DisplayAlert("Длительное нажатие", "Вы нажали и удерживали элемент", "ОК"); } private void OnNodeTapped(object sender, TappedEventArgs e)