我在用wpf制作图片缩放功能的时候,在一个Grid中放了一个Image,然后重写了Image的相关的MouseLeftButtonDown,MouseLeftButtonUp,MouseMove事件,xaml中的代码如下:
<Grid Name="ImgGrid" Width="600" ClipToBounds="True">
<Image x:Name="ImgCtrl" Source="desktop.jpg" Stretch="Uniform" MouseLeftButtonDown="ImgCtrlMouseLeftButtonDown"
MouseRightButtonUp="ImgCtrl_MouseRightButtonUp" MouseLeftButtonUp="ImgCtrlMouseLeftButtonUp" MouseMove="ImgCtrlMouseMove"
MouseWheel="ImgCtrlMouseWheel">
<Image.RenderTransform>
<TransformGroup>
<ScaleTransform x:Name="mScaleTransForm" ScaleX="1.0" CenterX="0"/>
<TranslateTransform x:Name="mTranslateTransform" X="0" Y="0"/>
</TransformGroup>
</Image.RenderTransform>
</Image>
</Grid>
但发现如果是在下图所示区域用鼠标进行拖动和缩放时,不会响应鼠标事件。
所以我把相关的鼠标响应事件代码从Image中移动到了Grid中,如下:
<Grid Name="ImgGrid" Width="600" ClipToBounds="True" MouseLeftButtonDown="ImgCtrlMouseLeftButtonDown"
MouseRightButtonUp="ImgCtrl_MouseRightButtonUp" MouseLeftButtonUp="ImgCtrlMouseLeftButtonUp" MouseMove="ImgCtrlMouseMove"
MouseWheel="ImgCtrlMouseWheel">
结果发现还不行
后来研究了半天才发现,grid中默认背景为空,这时候,怎么点击grid的背景都不会出发鼠标事件,我们需要给它一个背景,如果我们不想要背景颜色的话,那就设置成透明,如下添加一个Background="Transparent
<Grid Name="ImgGrid" Width="600" ClipToBounds="True" MouseLeftButtonDown="ImgCtrlMouseLeftButtonDown"
MouseRightButtonUp="ImgCtrl_MouseRightButtonUp" MouseLeftButtonUp="ImgCtrlMouseLeftButtonUp" MouseMove="ImgCtrlMouseMove" MouseWheel="ImgCtrlMouseWheel" Background="Transparent">
虽然背景为transparent透明,但这时候是有背景的,所以就能出发鼠标事件了。