Silverlight奇怪的點擊穿透問題。

  • 6558
  • 0
  • 2010-06-18

不知各位有沒有發生,在某一個元件上怎麼點都不會發生滑鼠的事件,如果你仔細看那些元件Background不是沒設定就是設為NULL,在Silverlight中如果元件背景色是NULL,是不會產生滑鼠事件的。

不知各位有沒有發生,在某一個元件上怎麼點都不會發生滑鼠的事件,如果你仔細看那些元件Background不是沒設定就是設為NULL,在Silverlight中如果元件背景色是NULL,是不會產生滑鼠事件的,如以下列這個例子。

Grid1與Grid3都有設定Background顏色,但Grid2沒有設定Background顏色,當我在Grid1與Grid3點擊都很正常,只是在Grid2上點擊卻出現Grid1的訊息。

Get Microsoft Silverlight
(Silverlight實際範例,請各位在各Grid上點擊看看)

 

<!--Grid1-->
<Grid Background="#FFCDCDCD" MouseLeftButtonUp="Grid1_MouseLeftButtonUp">
<TextBlock Text="Grid1" Margin="10,10,0,0" HorizontalAlignment="Left" VerticalAlignment="Top" FontSize="32" />
<Border Margin="100" BorderBrush="Black" BorderThickness="1">
<!--Grid2-->
<Grid MouseLeftButtonUp="Grid2_MouseLeftButtonUp">
<TextBlock Text="Grid2" Margin="10,10,0,0" HorizontalAlignment="Left" VerticalAlignment="Top" FontSize="32" />
<!--Grid3-->
<Grid Margin="100" Background="Red" MouseLeftButtonUp="Grid3_MouseLeftButtonUp">
<TextBlock Text="Grid3" Margin="10,10,0,0" HorizontalAlignment="Left" VerticalAlignment="Top" FontSize="32" />
</Grid>
</Grid>
</Border>
</Grid>
(相關XAML)
 
 

其實決解這問題很簡單,只要背景不要是Null就好了,null不等於透明喔,設定如下。

<!--在Silverlight中顏色是由四個16進位組成,第一個16進位是不透明度,之後才是RGB-->
<Grid Background="#00FFFFFF"/>
<!--Transparent = #00FFFFFF-->
<Grid Background="Transparent"/>

 
 
所有的容器型元件,Background預設都是NULL如:
  • Grid
  • Border
  • StackPanel
  • Canvas

如果要在這些元件上面處理滑鼠事件,請注意這個問題。