2009-07-01 11 views
1

私はデータバインディングを持つListBoxを持っています。ユーザーがListBoxItemの1つをクリックしたときにイベントを発生させる必要がありますが、それをどうやって行うのかは大変です。私はListBox.ItemTemplate上のグリッドを入れて、その上でMouseDownイベントを入れてみました:データバインディング(WPF)を使用したListBoxItemsのMouseDown

<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

答えて

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

+0

をItemContainerStyleに追加して、TextBlockにパディングを再追加すると、うまくいくようです。先端に感謝します。 – RandomEngy

関連する問題