2009-10-07 46 views
4

我有一个ListBox与一个相当简单的ItemTemplate定义 - 包含一个TextBlockButton。这显示如预期的,但有一个问题,但。当我点击ListBoxItem的内容,即文本或按钮时,该行在ListBox中未被选中。如果我点击线条的空白部分。当我点击线路上的任何地方时,我想要选择ListBoxItem。需要什么来实现这一目标?使WPF ListBoxItems可选

<ListBox ItemsSource="{Binding SomeElements}"> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <ListBoxItem Selected="ListBoxItem_Selected"> 
       <StackPanel Orientation="Horizontal"> 
        <TextBlock Text="{Binding Title}"></TextBlock> 
        <Button>Click</Button> 
       </StackPanel>             
      </ListBoxItem>            
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 
+0

[这里是回答你的问题。(http://stackoverflow.com/questions/1459786/selecting-a-listboxitem-when-its-inner-combobox-is-focused/1459885#1459885 )问题启发者遇到了完全相同的问题。 – Natrium 2009-10-07 07:03:22

回答

4

@Natrium不,问题不同,这里

  1. 您需要删除ListBoxItem的里面的DataTemplate。 DataTemplate不能有项目ListBoxItem,并且它不能正常工作。无论你在DataTemplate中定义了什么,都会在运行时自动放入ListBoxItem中,所以在你的情况下,这就是它创建的内容。
ListBoxItem 
    DataTemplate 
     ListBoxItem 
      StackPanel... 
  • 如果你想跟踪评选活动,那么你应该只赶上ListBox.SelectionChange事件,你不需要跟踪ListBoxItem_Selected。
  • 将您的代码更改为此。

    <ListBox ItemsSource="{Binding SomeElements}"> 
        <ListBox.ItemTemplate> 
         <DataTemplate> 
           <StackPanel Orientation="Horizontal"> 
            <TextBlock Text="{Binding Title}"></TextBlock> 
            <Button>Click</Button> 
           </StackPanel> 
         </DataTemplate> 
        </ListBox.ItemTemplate> 
    </ListBox> 
    
    +0

    完美..!感谢您澄清这一点:-) – stiank81 2009-10-07 09:21:13