WPF中Image控件没有内容时不会触发鼠标事件的问题

我在用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透明,但这时候是有背景的,所以就能出发鼠标事件了。

猜你喜欢

转载自blog.csdn.net/weixin_43935474/article/details/105202204