.net 使WPF ListBoxItems可选择

.net 使WPF ListBoxItems可选择,.net,wpf,listbox,selecteditem,listboxitem,.net,Wpf,Listbox,Selecteditem,Listboxitem,我有一个列表框,定义了一个相当简单的项目模板——包含一个文本块和一个按钮。这与预期的一样,但存在一个问题。当我单击ListBoxItem的内容,即文本或按钮时,在列表框中不会选中该行。如果我点击它行的空白部分。我希望在单击行中的任意位置时选择ListBoxItem。实现这一目标需要什么 <ListBox ItemsSource="{Binding SomeElements}"> <ListBox.ItemTemplate> <DataTemp

我有一个
列表框
,定义了一个相当简单的
项目模板
——包含一个
文本块
和一个
按钮
。这与预期的一样,但存在一个问题。当我单击
ListBoxItem
的内容,即文本或按钮时,在
列表框中不会选中该行。如果我点击它行的空白部分。我希望在单击行中的任意位置时选择
ListBoxItem
。实现这一目标需要什么

<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>

点击

@Natrium不,这里的问题不同

  • 您需要删除DataTemplate中的ListBoxItem。DataTemplate不能具有item ListBoxItem,它将无法正常工作。无论您在DataTemplate中定义什么,都会在运行时自动放在ListBoxItem中,所以在您的情况下,这就是它所创建的内容
  • 如果要跟踪选择事件,则应仅捕获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>
    
    
    点击
    
    Perfect。。!感谢您澄清这一点:-)问题发起者遇到了完全相同的问题。
    <ListBox ItemsSource="{Binding SomeElements}">
        <ListBox.ItemTemplate>
            <DataTemplate>
                    <StackPanel Orientation="Horizontal">
                        <TextBlock Text="{Binding Title}"></TextBlock>
                        <Button>Click</Button>
                    </StackPanel>
             </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>