2009-07-01 25 views
1

我有一個帶數據綁定的ListBox。我需要在用戶點擊其中一個ListBoxItem時觸發一個事件,但我無法完成如何做到這一點。我試圖把在ListBox.ItemTemplate網格,並把MouseDown事件上:帶有數據綁定的ListBoxItems上的MouseDown(WPF)

<ListBox 
    Name="popupListBox"> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <Grid MouseDown="Grid_MouseDown" Background="Aquamarine"> 
       <TextBlock Text="{Binding Path=TagText}" /> 
      </Grid> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

然而網格通常比實際的小ListBoxItem中。點擊任何部分時,我無法解決如何觸發它。

我試着看ListBox上的SelectionChanged事件,但是當你點擊當前選定的項目時不會觸發。我也試着編輯ListBoxItem的樣式,但我不知道如何正確地將MouseDown事件應用到它;我總是得到語法錯誤。

+0

這個問題得到一個更好的答案:http://stackoverflow.com/questions/1271375/how-to-capture-a-mouse-click-on-an-item-in-a-listbox-in -wpf – RandomEngy 2009-08-13 16:16:55

回答

0

您可以添加ItemContainerStyle來拉伸DataTemplate以填充可用的水平空間。鼠標放下事件現在會在您點擊該物品的任何地方觸發。

<ListBox Name="popupListBox"> 
    <ListBox.ItemContainerStyle> 
     <Style TargetType="{x:Type ListBoxItem}"> 
      <Setter Property="HorizontalContentAlignment" Value="Stretch"/> 
     </Style> 
    </ListBox.ItemContainerStyle> 

    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <Grid MouseDown="Grid_MouseDown" Background="Aquamarine"> 
       <TextBlock Text="{Binding Path=tagText}" /> 
      </Grid> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 
+0

這很接近,但左側有幾個像素未包含在內容中。我希望能有一個更清潔的解決方案。 – RandomEngy 2009-07-01 21:58:18