3

我在我的 Windows 手机项目中使用了一些透明图像。假设我的原始图像尺寸为 400 x 100。

原始图像

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

切片后的图像但宽度相同,一个部分是活动的,另一部分是透明的

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

4

1 回答 1

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;
于 2013-03-22T04:33:53.867 回答