WPF 鼠标右键事件不会触发



当用户释放鼠标右键时,MouseRightButtonUp 事件不会触发。用户单击鼠标右键开始绘制矩形,因此当他们抬起右键时,需要通过将 bool 设置为 false 来停止绘制。然后,鼠标移动事件知道不要继续绘制矩形。鼠标右键按下事件会正常触发,但鼠标右键按下事件不会触发。

我目前认为这是因为 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 中执行操作,但事实并非如此。单击右键后,即使您再次向上抬起鼠标按钮,它也会继续绘制矩形。

感谢您的任何回答,任何内容都值得赞赏。

Canvas 元素需要具有背景颜色,并且它不能完全透明,因为在这两种情况下,所有事件都不会被分散。

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

最新更新