WPF ListBox选择不起作用

时间:2010-11-15 12:21:00

标签: c# wpf listbox selectionchanged

我有几个项目的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属性。

我尝试在ListBox和项目中设置IsEnabled,包括代码和XAML,但它没有帮助。

欢迎任何关于在WPF中更好地实现此方法的评论。

3 个答案:

答案 0 :(得分:2)

如果您只想显示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);
}

答案 1 :(得分:0)

在列表框中设置IsSynchronizedWithCurrentItem="true"

Here您可以找到一个起点来获取有关此属性的更多详细信息。

将此属性设置为true会使选择与保存实际所选项目的当前项目同步。当您单击空白区域时,当前项可能会更改为null,并且您将调用事件处理程序。

答案 2 :(得分:0)

可能是列表框项中的内容未被拉伸。只需为列表框项目编写此样式并尝试。

<Style TargetType="{x:Type ListBoxItem}">
  <Setter Property="HorizontalContentAlignment" Value="Stretch" />
</Style>