【问题标题】:ListBoxItem selection on MouseLeftButtonUpMouseLeftButtonUp 上的 ListBoxItem 选择
【发布时间】:2012-04-10 05:13:53
【问题描述】:

我有一个绑定到 ObservableCollection 的 ListBox。

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

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

我已经尝试如下。

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

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

我已使用“名称”属性来存储 ListBoxItem 的先前状态(标签属性已用于 DataTemplate 中数据绑定的其他目的)。

我们怎样才能做到这一点?

任何想法将不胜感激。

【问题讨论】:

    标签: wpf triggers listbox styles listboxitem


    【解决方案1】:

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

    这会给你一些想法吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-12
      • 2012-01-23
      • 2019-10-26
      • 1970-01-01
      相关资源
      最近更新 更多