Почему событие «MouseLeftButtonUp» не работает или срабатывает большую часть времени?

Чтобы упростить проблему, я создал простой фрагмент кода с той же проблемой:

      <Window x:Class="WPFTest.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WPFTest"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Grid>
        <Canvas x:Name="drawingCanvas" 
            MouseLeftButtonDown="drawingCanvas_MouseLeftButtonDown" 
            Background="White" 
            MouseMove="drawingCanvas_MouseMove" 
            MouseLeftButtonUp="drawingCanvas_MouseLeftButtonUp" />
    </Grid>
</Window>

Когда я пытаюсь использоватьMouseLeftButtonUpсобытие, оно не работает большую часть времени. Также с помощью . Может ли кто-нибудь сказать мне, почему это так, и предложить какие-либо предложения по решению этой проблемы?

      namespace WPFTest
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            drawMode = false;
            startPoint = new Point();
            endPoint = new Point();
        }

        private bool drawMode;
        private bool alreadyForm;
        private Point startPoint;
        private Point endPoint;
        
        private void drawingCanvas_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            drawMode = true;
            alreadyForm = false;
            startPoint = e.GetPosition(drawingCanvas);
        }

        private void drawingCanvas_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
        {
            drawMode = false;
            alreadyForm = false;
            Debug.WriteLine("the event was detected.");
        }

        private void drawingCanvas_MouseMove(object sender, MouseEventArgs e)
        {
            if (drawMode)
            {
                if (alreadyForm) 
                     drawingCanvas.Children.RemoveAt(drawingCanvas.Children.Count-1);

                endPoint = e.GetPosition(drawingCanvas);

                Line newLine = new Line();
                newLine.X1 = startPoint.X;
                newLine.Y1 = startPoint.Y;
                newLine.X2 = endPoint.X;
                newLine.Y2 = endPoint.Y;

                newLine.Stroke = Brushes.Black;
                newLine.StrokeThickness = 4;

                drawingCanvas.Children.Add(newLine);

                alreadyForm = true;
            }
        }
    }
}

Я пытался решить проблему с помощьюPreviewMouseLeftButtonUpсобытие, но это было то же самое.

Я пытался использоватьe.Handled = true;но это тоже самое

0 ответов

Другие вопросы по тегам