当用户释放鼠标右键时,不会触发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中的操作,但不会这样做。单击鼠标右键后,即使您再次向上拖动鼠标按钮,它也会继续绘制矩形。
感谢您的回答,感谢您。
答案 0 :(得分:2)
Canvas元素需要具有背景色,并且不能完全透明,因为在这两种情况下,事件都不会受到干扰。
如果您不想给它一种颜色,请设置几乎透明的颜色,您甚至不会注意到。
示例:#02FFFFFF