Событие WPF MouseRightButtonUp не сработает - PullRequest
1 голос
/ 09 июля 2019

Событие MouseRightButtonUp не сработает, когда пользователь отпустит правую кнопку мыши. Пользователь щелкает правой кнопкой мыши, чтобы начать рисовать прямоугольник, поэтому, когда он поднимает правую кнопку, он должен остановить рисование, установив для bool значение false. Событие Mouse Move затем знает, не продолжать рисовать прямоугольник. Событие нажатия правой кнопки мыши срабатывает нормально, но событие нажатия правой кнопки мыши не срабатывает.

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

Я попытался переместить событие в полотна, ZoomBorder и сетку.

XAML:

<Grid Grid.Column="2" MinWidth="700">
   <ScrollViewer>
       <paz:ZoomBorder Name="zoomBorder" Stretch="None" ZoomSpeed="1.1" 
                       Background="White" ClipToBounds="True" 
                       VerticalAlignment="Stretch" 
                       HorizontalAlignment="Stretch">

                       <Canvas Name="gridCanvasOverImage">
                            <Canvas Name="canvasOverImage">
                                <Image x:Name="loadedImage"
                                       Stretch="Uniform"                                                                               
                                       HorizontalAlignment="Stretch" 
                                       VerticalAlignment="Stretch"
                                       MouseRightButtonDown=
                                            "LoadedImage_MouseRightButtonDown"
                                       MouseRightButtonUp=
                                            "LoadedImage_MouseRightButtonUp"
                                       MouseMove="LoadedImage_MouseMove"/>

                                 <Rectangle x:Name="rectangleOverImage"
                                             Stroke="SkyBlue"/>
                            </Canvas>
                         </Canvas>
          </paz:ZoomBorder>
     </ScrollViewer>
</Grid>

Код в C #:

// <Simplified C#>
//* Mouse button up
private void LoadedImage_MouseRightButtonDown(object sender, MouseButtonEventArgs e)
        {
            drawRect = true; // Starts drawing of rectangle  
        }

//* Mouse Button Down
private void LoadedImage_MouseRightButtonUp(object sender, MouseButtonEventArgs e)
        {
            drawRect = false;
        }

//* Drawing Rectangle
 private void LoadedImage_MouseMove(object sender, MouseEventArgs e)
        {
            if (drawRect) // If the right mouse button is down
            {
                // Do Stuff
            }
        }
// </Simplified C#>

Когда пользователь поднимает правую кнопку мыши, он устанавливает переменную рисования bool в false, что должно мешать программе выполнять какие-либо действия в LoadedImage_MouseOver, но это не так. При нажатии правой кнопки он продолжает рисовать прямоугольник, даже если вы снова поднимаете кнопку мыши.

Спасибо за любые ответы, все ценится.

1 Ответ

2 голосов
/ 10 июля 2019

Элемент Canvas должен иметь цвет фона, и он не может быть полностью прозрачным, потому что в этих двух случаях все события не будут отображаться.

Если вы не хотите придавать ему цвет, установите почти прозрачный, вы даже не заметите. Пример: #02FFFFFF

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...