MouseLeftButtonUp上的ListBoxItem选择

时间:2012-03-26 17:10:21

标签: wpf triggers listbox styles listboxitem

我有一个绑定到ObservableCollection的ListBox。

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

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

我试过以下。

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

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

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

我们如何实现这一目标?

任何想法都将受到高度赞赏。

1 个答案:

答案 0 :(得分:0)

我建议的第一件事是忘记使用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更改时设置的内容。

这会给你一些想法吗?