ListBoxMouseLeftButtonUp上的项目选择



我有一个ListBox,它绑定到一个ObservableCollection。

我想在释放鼠标时选择一个ListBoxItem(意思是MouseLeftButtonUp),并且我需要切换选择。意味着当ListBoxItem被选中时,再次选择该项目将取消选择该项目,反之亦然。

当ListBoxItem被选中时,我也需要应用不同的样式。

我试过如下。

我已经为ListBoxItem使用了DataTemplate和Style,在EventSetter中,我已经为MouseLeftButtonUp订阅了事件,在事件处理程序中,我正在选择项目并切换它。

问题是有多种方法可以选择项目(Ctrl+箭头键、Shift+箭头键,箭头键、Ctrl+A)并为选择应用样式。

我已使用"Name"属性存储ListBoxItem的以前状态(Tag属性已用于DataTemplate中数据绑定的其他目的)。

我们如何才能做到这一点?

任何想法都将不胜感激。

我建议的第一件事是忘记使用MouseLeftButtonUp,而是将控件的SelectedItem绑定到代码中的一个变量。这样,如果用户决定使用键盘,那么所有的东西都会被困住。

<ListBox x:Name="lbItems" ItemsSource="{Binding Path=MyListItems}" SelectedItem="{Binding Path=SelectedItem, Mode=TwoWay}"/> 
public ObservableCollection<YourClass> MyListItems
public YourClass SelectedItem

一旦用户选择项目,就会自动设置SelectedItem。

然后我会问,如果他们再次点击该项目,是否应该取消选择?这不是标准行为,您需要取消选择该项目吗?

如果你想记录之前选择的项目,你可以有一个

private YourClass _previousSelectedItem;
private YourClass _selectedItem;
public YourClass SelectedItem
    {
     get { return _selectedItem;}
     set { if (_selectedItem == value) return;
           _previousSelectedItem = _selectedItem;
           _selectedItem = value;
         }
    }

SelectedItem更改时设置的。

这给了你一些想法吗?

相关内容

  • 没有找到相关文章