如何获取鼠标点击元素时该元素的信息

如何获取鼠标点击元素时该元素的信息

哎呀呀,在初学过程中总是避免不了踩坑,这不,今晚又踩了一个。多亏了RoutedEventArgs中的Source属性,知根寻源,最后才找到问题元素是哪一位。

前天还是上周,老大说让我把一个切换动画改的简单一些。于是我把原来由平移和缩放组合而成的动画变成了只保留平移动画。谁会知道这一个小小的改动,竟会让效果出了点问题。
如何获取鼠标点击元素时该元素的信息_第1张图片
就像上边截取的那样,上半部分是原来的代码,下半部分是后来我注释掉的代码。我原以为不就去个动画效果吗,把原来代码注释掉不就行了,可后来发现根本不是这回事。问题就出在那个Value="1497"上。

由于项目所用机器的分辨率规定为1080P,所以左右移动的动画必须保证最少1920的像素距离。否则就会发生即便元素移动了,但由于没有移动出去,导致一些事件还是无法正确传递到下层。而这里更恶心的是,由于动画是将透明度变为0,所以你很难发现到底是哪个元素在上层阻碍了你事件的正确传达。

而这个时候,Source的作用就来了,它可以帮助你寻找到鼠标点击事件发生时,第一个经过的元素类型,写法也很简单,只需要如下使用就行了,如果该元素没有Name的话,可以查看该元素的类型然后倒退寻找。

// 寻找鼠标点击时所经过第一个元素的名称。
private void PreviewMouseButtonDown(object sender, MouseButtonEventArgs e)
    {
        var mouseDown = e.Source as FrameworkElement;
        if (mouseDown != null)
        {
            string elementName = mouseWasDownOn.Name;
            Console.Writeline("该元素的名字是:"+elementName);
        }
    }

而我之前之值之所以是1497,我猜测可能是在Blend里生成的代码,然后又因为缩小到0.3倍,正好可以避免原来的Image元素平移出去,所以一直没出错……

总之,被自己蠢哭了,哈哈哈哈,贴出来就当是给新手打打预防针吧。

你可能感兴趣的:(WPF)