3

我在Windows Phone項目中使用了一些透明圖像。 讓說我的Origanal圖像尺寸爲400×100禁用WP7/WP8中圖像的透明部分的輕擊事件

Original Image

切片圖像轉換成看起來這四個不同的部分之後。第一個箭頭是活動的,休息部分是透明的,但圖像大小是相同的400×100。我對所有其餘的三個箭頭做同樣的事情。我將它們切成活動部分,而其餘部分將是透明的,尺寸將爲400 x 100。因此,當我將所有4個圖像放入網格中時,它將顯示如上圖像。

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

我想每個圖像的輕擊事件。有沒有什麼辦法可以得到有一部分平均顏色值不透明區域或圖像不活動部分的有效部分平均值的點擊事件。意思是一旦我點擊第一張圖片,它會給我那個圖像的事件。當我點擊第二張圖片時,它會給我第二張圖片的點擊事件。但是,當我點擊圖像時,它只給我1個點擊事件,因爲它取整個寬度和高度,其他圖像的尺寸也相同。請爲此提出任何解決方法。

+0

任何部分爲什麼你不使用4個100x100圖像的理由? – Riho 2013-03-20 13:14:53

+0

@ Riho:是的,其實這是非常普遍的圖片,在我的實際項目中,一張圖片會有100個或更多的切片。如果我爲每個切片設置相同的大小,只是裁剪需要點擊事件的活動區域,而其餘部分則是透明的。一旦我將這些圖像添加到我的容器中,它將形成實際圖像,而不會提供硬編碼邊距。我希望你明白我的觀點。 – 2013-03-20 13:30:32

回答

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; 
+0

一串謝謝你。你做過漂亮的工作和它的魅力。真的很感謝:) – 2013-03-22 07:25:36

+0

我認爲它應該是 'var w = new WriteableBitmap(img,null); var p = args.GetPosition(img); if(p.X> = w.PixelWidth || p.Y> = w.PixelHeight) { continue; } ' 爲了避免出現界限異常,如果圖像有不同的尺寸或不同的邊距。 – 2014-04-14 07:46:34