首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MouseLeftButtonUp上的ListBoxItem选择

MouseLeftButtonUp上的ListBoxItem选择
EN

Stack Overflow用户
提问于 2012-03-27 01:10:21
回答 1查看 526关注 0票数 1

我有一个绑定到ObservableCollection的ListBox。

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

当选择ListBoxItem时,我还需要应用不同的样式。

我已经尝试了以下几种方法。

我为ListBoxItem使用了DataTemplate和样式,在EventSetter中,我为MouseLeftButtonUp订阅了事件,在事件处理程序中,我选择并切换了项。

问题是有许多方法可以选择项目(Ctrl+arrow键、Shift+arrow键、箭头键、Ctrl+A)并将样式应用于所选内容。

我使用了'Name‘属性来存储ListBoxItem的先前状态(DataTemplate中已经用于数据绑定的其他用途的Tag属性)。

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

任何想法都将得到极大的赞赏。

EN

回答 1

Stack Overflow用户

发布于 2012-03-27 03:20:20

我建议的第一件事是忘记使用MouseLeftButtonUp,而是将控件的SelectedItem绑定到代码中的一个变量。这样,如果用户决定使用键盘,一切都会被捕获。

代码语言:javascript
复制
<ListBox x:Name="lbItems" ItemsSource="{Binding Path=MyListItems}" SelectedItem="{Binding Path=SelectedItem, Mode=TwoWay}"/> 

public ObservableCollection<YourClass> MyListItems
public YourClass SelectedItem

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

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

如果要记录以前选择的项,则可以使用

代码语言:javascript
复制
private YourClass _previousSelectedItem;

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

您可以在SelectedItem更改时设置。

这给了你一些想法吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9876554

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档