WPF MouseRightButtonUp事件不会触发

时间:2019-07-09 20:29:34

标签: c# wpf event-handling

当用户释放鼠标右键时,不会触发MouseRightButtonUp事件。用户单击鼠标右键可以开始绘制矩形,因此当他们抬起鼠标右键时,需要通过将布尔值设置为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 个答案:

答案 0 :(得分:2)

Canvas元素需要具有背景色,并且不能完全透明,因为在这两种情况下,事件都不会受到干扰。

如果您不想给它一种颜色,请设置几乎透明的颜色,您甚至不会注意到。 示例:#02FFFFFF