WPF listbox如何添加item的单击事件?

我爱编程_编程不爱我 2014-07-10 12:07:55


虽然是有MouseLeftButtonDown这些事件,但是怎么处理传过来的sender
才能知道我点击的item是第几项呢?
有什么快捷的方法么
selectedchanged事件虽然可以利用selectedindex获得单击的index,但是如果重复点击一个item的话
就只能第一次触发事件,如何在selectedindex不改变的情况下 ,每次都触发事件?




...全文
6230 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
zcs阿怪 2016-05-11
  • 打赏
  • 举报
回复
直接写一个先把selectedItem保存下来 selectedItem=null;好像就可以了吧
zcs阿怪 2016-05-11
  • 打赏
  • 举报
回复
那样就要调用两次 不得行
asia217 2014-08-12
  • 打赏
  • 举报
回复
    <DataGrid x:Name="dgdrugs" Grid.Row="0" SelectionMode="Single" IsReadOnly="True"
                          ItemsSource="{Binding ViewSource}" SelectedItem="{Binding SelectProuctItem}">

     private SelectableItem<ProductInfo> _SelectProuctItem;
        public SelectableItem<ProductInfo> SelectProuctItem
        {
            get { return _SelectProuctItem; }
            set
            {

                SetProperty(ref _SelectProuctItem, value);
            }
        }


MvvM  datagrid SelectedItem="{Binding SelectProuctItem}"  后台直接获取
yespie 2014-08-08
  • 打赏
  • 举报
回复
楼上正解..
exception92 2014-07-11
  • 打赏
  • 举报
回复
自定义ListBox类

 public class myListBox : System.Windows.Controls.ListBox
    {
        protected override DependencyObject GetContainerForItemOverride()
        {
            return new myListBoxItem();
        }

    }
    public class myListBoxItem : System.Windows.Controls.ListBoxItem
    {
        protected override void OnSelected(System.Windows.RoutedEventArgs e)
        {
            DependencyObject dep = (DependencyObject)e.OriginalSource;

            while ((dep != null) && !(dep is ListBoxItem))
            {
                dep = VisualTreeHelper.GetParent(dep);
            }

            if (dep == null)
                return;

            ListBoxItem item = (ListBoxItem)dep;
        
            if (item.IsSelected)
            {
                item.IsSelected = !item.IsSelected;
                //e.Handled = true;
            }
            base.OnSelected(e);
        }
    }
页面引用

  xmlns:control="clr-namespace:wpf.DependencyControl"

// 在Grid 中写
  <control:myListBox x:Name="myListBox" Width="100" Height="100" SelectionMode="Single" 
                               SelectionChanged="myListBox_SelectionChanged">

// 后台cs代码

 private void myListBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            object o = myListBox.SelectedItem;
            if (o == null)
                return;
            MessageBox.Show(o.ToString());
        }
exception92 2014-07-10
  • 打赏
  • 举报
回复
exception92 2014-07-10
  • 打赏
  • 举报
回复
那有selectedchanged事件??有SelectionChanged事件
  • 打赏
  • 举报
回复
引用 2 楼 duanzi_peng 的回复:
我记错了,是SelectionChanged 你那个图的效果怎么来的,就是要连续点击同一item两次还有事件触发的效果, 你这个是怎么写的,教教我!
weixin_47071268 2021-07-15
  • 举报
回复
@我爱编程_编程不爱我 有结果了吗,我也遇到这个了
weixin_47071268 2021-07-15
  • 举报
回复
@weixin_47071268 怎么解决的?
在Windows系统中,notepad.exe(记事本)是一个“经典的”、“简洁的”文本编辑器。这个软件,没有华丽的外观,也没有繁杂的功能,仅仅是一个文本编辑小软件。虽然经过Windows系统数十年的变换,但它却保持着永恒姿态,数十年来几乎不曾改变过。曾经,VS中的经典DEMO中,就有它的身影,一个新建的项目,就藏有一个新建的“记事本”。然而,在WPF的项目中,“记事本”却消失的无影无踪,也许是很容易实现,也许是为了革新,而不愿再传承“经典”。确实,使用WPF技术再次让“记事本”复活,确实也是一件非常容易的事情。但是,如果,使用WPF技术,再搭配当下非常流行的MVVM模式呢?复活“记事本”的难度却陡然上升至很多WPF程序员为之默默叹气。而,MVVM模式是掌握WPF的最顶级技术,MVVM模式拥有的无尽的优势,让WPF相对于过往的编程模式来说,是一种革命性的创新,从而也成为大中型WPF项目中必须的模式。但,学习难度。。。。。。在这个《WPF记事本开发详解》的课程中,赵老师带领你在WPF中,从零开始一步步构建MVVM模式,直到让你亲自以WPF+MVVM的方式,让这个经典的“记事本”软件从你的手中“复活”。在课程中,赵老师会详细讲解WPF和MVVM中的各种技巧,让你从此爱上WPF+MVVM编程。

8,735

社区成员

发帖
与我相关
我的任务
社区描述
WPF/Silverlight相关讨论
社区管理员
  • WPF/Silverlight社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧