4

我有ListBox一个相当简单的ItemTemplate定义 - 包含 aTextBlock和 a Button。这显示如预期,但有一个问题。当我单击 的内容(ListBoxItem即文本或按钮)时,不会在ListBox. 如果我点击它的空白部分。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>
4

1 回答 1

4

@Natrium不,这里的问题不同,

  1. 您需要删除 DataTemplate 中的 ListBoxItem。DataTemplate 不能有项 ListBoxItem,它将无法正常工作。无论您在 DataTemplate 中定义什么,都会在运行时自动放入 ListBoxItem 中,因此在您的情况下,这就是它被创建的内容。
ListBoxItem
    DataTemplate
        ListBoxItem
            StackPanel...
  1. 如果你想跟踪选择事件,那么你应该只捕捉 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>
于 2009-10-07T08:40:45.477 回答