2009-08-24 44 views
3

DataTemplate看起來是這樣的:如果數據模板具有透明背景,如何捕獲鼠標左下?

<DataTemplate x:Key="ItemTemplate"> 
<StackPanel MouseLeftButtonDown="StackPanel_MouseLeftButtonDown"> 

但是我不能趕上鼠標左鍵向下。如果我將模板的背景設置爲某種顏色,則可以。

如何創建透明DataTemplate並捕獲MouseLefButtonDown事件?

謝謝。

+0

從技術上講,你的StackPanel是透明的,但你確實有背景設置爲null。這與設置Background =「Transparent」不同,後者會導致相同的外觀,但是您的StackPanel將接收鼠標事件。 – CodeNaked 2011-08-09 02:05:30

回答

1

MouseLeftButtonDown是冒泡事件。這意味着它首先在最深的層次上觸發,然後通過邏輯樹向上「冒泡」。如果您的StackPanel中包含的內容正在處理MouseLeftButtonDown,那麼您將永遠不會看到事件泡沫向上,因此它永遠不會到達您的StackPanel

PreviewMouseLeftButtonDown另一方面是隧道事件。這意味着它將首先在頂層容器中觸發,然後通過邏輯樹向下「隧道」,直到達到最低級別。嘗試將您的活動更改爲:

<StackPanel PreviewMouseLeftButtonDown="StackPanel_PreviewMouseLeftButtonDown"> 

然後看看你是否能夠趕上它。

2

如果你想捉對StackPanel的本身,你只需要設置它的背景畫筆是透明的鼠標事件:

<StackPanel MouseLeftButtonDown="StackPanel_MouseLeftButtonDown" 
     Background="Transparent" Height="400" Width="400" > 
<Button Content="dfsdf"/> 

+0

嗯,這是我的問題。如果背景是Transparetn,我無法收到活動。如果它被設置爲黑色,白色等,我可以接收事件MouseLeftButtonDown。 爲了更好地解釋,我需要具有transaprent背景的列表框項目,我可以通過鼠標拖動。因此我需要接收MouseLeftButtonDown並開始拖動操作。 – 2009-08-25 14:57:23