在WP7 / WP8中禁用图像透明部分的点击事件

时间:2013-03-20 11:08:26

标签: c# silverlight windows-phone-7 image-processing windows-phone-8

我在Windows手机项目中使用了一些透明图像。 让Say My Origanal Image Size为400 x 100。

Original Image

将图像切割成四个不同的部分后,它看起来像这样。第一个箭头是活动的,休息部分是透明的,但图像大小是相同的400 x 100.我对其余三个箭头做同样的事情。我将它们切成活动部分,而休息部分将是透明的,尺寸将是400 x 100.所以当我将所有4个图像放在网格中时,它将显示如上图像。

Image After Slicing But Its Same in Width, One Part is active and other part is transparent

我想获得每张图片的点击事件。有什么方法我可以得到活动部分均值的点击事件,它有一些值平均颜色值不是透明区域或图像的非活动部分。一旦我点击第一张图片,它就会给我一张该图像的事件。当我点击第二张图像时,它会给我第二张图像的点击事件。但是当我点击图像时,它只给我一个点击事件,因为它占据了整个宽度和高度,而其他图像也是相同的大小。请为此建议任何解决方法。

1 个答案:

答案 0 :(得分:2)

XAML

<Grid Name="Grid1">
    <Image Tag="Image1" Source="1.png"/>
    <Image Tag="Image2" Source="2.png"/>
    <!-- more images -->
</Grid>

CS

void MouseDown(object sender, MouseButtonEventArgs args)
{
    foreach (var img in ((Panel)sender).Children.OfType<Image>())
    {
        var w = new WriteableBitmap(img, null);
        var p = args.GetPosition(img);
        if (w.Pixels[w.PixelWidth * (int)p.Y + (int)p.X] != 0)
        {
            MessageBox.Show(string.Format("You clicked {0}!", img.Tag));
            args.Handled = true;
            break;
        }
    }
}

像这样附加处理程序

Grid1.AddHandler(UIElement.MouseLeftButtonDownEvent,
    new MouseButtonEventHandler(MouseDown), false);

命名空间

using System.Linq;
using System.Windows.Media.Imaging;