Создание WPF ListBoxItems по выбору - PullRequest
4 голосов
/ 07 октября 2009

У меня есть ListBox с довольно простым определенным ItemTemplate - содержащим TextBlock и 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>

1 Ответ

4 голосов
/ 07 октября 2009

@ Natrium Нет, проблема здесь другая,

  1. Вам необходимо удалить ListBoxItem внутри DataTemplate. 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>
...