【问题标题】:Deselect on single click in a ListBox with Extended SelectionMode在具有扩展选择模式的列表框中单击时取消选择
【发布时间】:2017-07-12 14:04:55
【问题描述】:

我有一个ListBox 和SelectionMode="Extended"。您只能通过在单击时按住 ctrl 来取消选择最后一个项目。我希望能够通过单击它来取消选择该项目,同时不改变 Extended 选择模式的行为。

我只找到了关于这个主题的one question,它实际上有一个不同的目标(能够通过在ListBox之外单击来取消选择所有项目)。

【问题讨论】:

  • 所以基本上你希望点击一个选定的项目应该取消选择它,对吧?
  • @mm8 是的。如果您认为我的问题不够清楚,请随时对其进行编辑。不幸的是,我有时觉得我写的东西应该很容易被每个人理解,而实际上并非如此。

标签: c# wpf listbox selection


【解决方案1】:

如果我正确理解您的要求,您可以处理 ListBoxItem 容器的 PreviewMouseLeftButtonDown 事件,如果它已被选中,则取消选择它:

<ListBox SelectionMode="Extended">
    <ListBox.ItemContainerStyle>
        <Style TargetType="ListBoxItem">
            <EventSetter Event="PreviewMouseLeftButtonDown" Handler="OnMouseLeftButtonDown"/>
        </Style>
    </ListBox.ItemContainerStyle>
    <ListBoxItem>1</ListBoxItem>
    <ListBoxItem>2</ListBoxItem>
    <ListBoxItem>3</ListBoxItem>
</ListBox>

private void OnMouseLeftButtonDown(object sender, MouseEventArgs e)
{
    ListBoxItem lbi = sender as ListBoxItem;
    if (lbi != null)
    {
        if (lbi.IsSelected)
        {
            lbi.IsSelected = false;
            e.Handled = true;
        }
    }
}

这应该允许您在不使用CTRL 键的情况下取消选择项目。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多