WPF ListBox выбор не работает - PullRequest
       41

WPF ListBox выбор не работает

2 голосов
/ 15 ноября 2010

У меня есть ListBox для нескольких элементов, и я должен иметь возможность щелкать по ним.Проблема в том, что событие SelectionChanged не срабатывает, когда я нажимаю на текст элемента, только если я нажимаю на пустую часть.Я довольно новичок в WPF и не понимаю, почему это происходит.

XAML:

<ListBox Name="lBoxVouchers" BorderThickness="0" FontSize="15" SelectionChanged="lBoxVouchers_SelectionChanged">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <ListBoxItem Content="{Binding Name}" />
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

Обработчик:

private void lBoxVouchers_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    if (e.AddedItems.Count > 0)
        MessageBox.Show("You just selected " + e.AddedItems[0]);
}

Ясвязывание списка объектов в коде через свойство lBoxVouchers.ItemsSource, и они отображаются.Конечно, у каждого объекта есть свойство Name.

Я пытался установить IsEnabled в ListBox и элементах, как в коде, так и в XAML, но это не помогает.Любые комментарии о лучших способах сделать это в WPF также приветствуются.

Ответы [ 3 ]

2 голосов
/ 15 ноября 2010

Если вы хотите показать только свойство Name, вы можете определить свой список следующим образом:

<ListBox Name="lBoxVouchers" BorderThickness="0" FontSize="15" SelectionChanged="lBoxVouchers_SelectionChanged" DisplayMemberPath="Name" />

Если вы поместите свои элементы в ObservableCollection в коде позади, вы также можете передать привязку данных в XAML:

<ListBox Name="lBoxVouchers" BorderThickness="0" FontSize="15" SelectionChanged="lBoxVouchers_SelectionChanged" DisplayMemberPath="Name" ItemsSource={Binding Path=Items}" />

И в вашем коде должно быть что-то вроде:

ObservableCollection<object> Items {get; set}

Об обработчике я бы тоже сделал что-то вроде этого:

private void lBoxVouchers_SelectionChanged(object sender, SelectionChangedEventArgs e) {
    if (((ListBox)sender).SelectedItem != null)
        MessageBox.Show("You just selected " + (ListBox)sender).SelectedItem);
}
0 голосов
/ 15 ноября 2010

может быть содержимое в элементе списка не растягивается.просто напишите этот стиль для элемента списка и попробуйте.

<Style TargetType="{x:Type ListBoxItem}">
  <Setter Property="HorizontalContentAlignment" Value="Stretch" />
</Style>
0 голосов
/ 15 ноября 2010

Установить IsSynchronizedWithCurrentItem="true" в списке.

Здесь вы можете найти отправную точку для получения более подробной информации об этом свойстве.

Если для этого свойства установлено значение true, выбор будет синхронизирован с текущим элементом, который содержит фактический выбранный элемент. Когда вы щелкаете пустое пространство, вероятно, текущий элемент меняется на ноль, и вы вызываете обработчик события.

...