我有一个绑定到ObservableCollection的ListBox。
我想要在释放鼠标时选择一个ListBoxItem (意思是MouseLeftButtonUp),以及我需要切换选择。意味着当选择ListBoxItem时,再次选择该项将取消选择该项,反之亦然。
当选择ListBoxItem时,我还需要应用不同的样式。
我已经尝试了以下几种方法。
我为ListBoxItem使用了DataTemplate和样式,在EventSetter中,我为MouseLeftButtonUp订阅了事件,在事件处理程序中,我选择并切换了项。
问题是有许多方法可以选择项目(Ctrl+arrow键、Shift+arrow键、箭头键、Ctrl+A)并将样式应用于所选内容。
我使用了'Name‘属性来存储ListBoxItem的先前状态(DataTemplate中已经用于数据绑定的其他用途的Tag属性)。
我们如何才能做到这一点?
任何想法都将得到极大的赞赏。
发布于 2012-03-27 03:20:20
我建议的第一件事是忘记使用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更改时设置。
这给了你一些想法吗?
https://stackoverflow.com/questions/9876554
复制相似问题