在具有扩展选择模式的列表框中单击取消选择
Deselect on single click in a ListBox with Extended SelectionMode
我有一个 ListBox
和 SelectionMode="Extended"
。您只能通过在单击时按住 ctrl 来取消选择最后一个项目。我希望能够通过单击取消选择该项目,而不更改 Extended
选择模式以外的行为。
我只找到 one question 关于这个主题,它实际上有一个不同的目标(能够通过点击 ListBox
以外的地方来取消选择所有项目)。
如果我正确理解了您的要求,您可以处理 ListBoxItem
容器的 PreviewMouseLeftButtonDown
事件,如果它已经 selected,则取消 select 事件:
<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
键的情况下取消 select 一个项目。
我有一个 ListBox
和 SelectionMode="Extended"
。您只能通过在单击时按住 ctrl 来取消选择最后一个项目。我希望能够通过单击取消选择该项目,而不更改 Extended
选择模式以外的行为。
我只找到 one question 关于这个主题,它实际上有一个不同的目标(能够通过点击 ListBox
以外的地方来取消选择所有项目)。
如果我正确理解了您的要求,您可以处理 ListBoxItem
容器的 PreviewMouseLeftButtonDown
事件,如果它已经 selected,则取消 select 事件:
<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
键的情况下取消 select 一个项目。