3

WindowsPhoneプロジェクトでいくつかの透明な画像を使用しています。私の元の画像サイズは400x100だとしましょう。

元の画像

画像を4つの異なる部分にスライスすると、次のようになります。最初の矢印はアクティブで、残りの部分は透明ですが、画像サイズは同じ400 x 100です。残りの3つの矢印すべてについて、同じようにします。アクティブな部分のためにそれらをスライスし、残りの部分は透明になり、サイズは400 x 100になります。したがって、4つの画像すべてをグリッドに配置すると、上の画像のように表示されます。

スライス後の画像ですが、幅は同じです。一方の部分はアクティブで、もう一方の部分は透明です。

各画像のタップイベントを取得したい。画像の透明な領域や非アクティブな部分ではなく、ある値の平均色値を持つアクティブな部分の平均のタップイベントを取得する方法はありますか?つまり、最初の画像をクリックすると、その画像のイベントが表示されます。そして、2番目の画像をタップすると、2番目の画像のタップイベントが表示されます。しかし、画像をクリックすると、全幅と高さを取得し、他の画像も同じサイズであるため、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 に答える