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

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


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




...全文
6717 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用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
  • 打赏
  • 举报
回复
楼上正解..
  • 打赏
  • 举报
回复
自定义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());
        }
  • 打赏
  • 举报
回复
  • 打赏
  • 举报
回复
那有selectedchanged事件??有SelectionChanged事件
  • 打赏
  • 举报
回复
引用 2 楼 duanzi_peng 的回复:
我记错了,是SelectionChanged 你那个图的效果怎么来的,就是要连续点击同一item两次还有事件触发的效果, 你这个是怎么写的,教教我!
weixin_47071268 2021-07-15
  • 举报
回复
@我爱编程_编程不爱我 有结果了吗,我也遇到这个了
weixin_47071268 2021-07-15
  • 举报
回复
@weixin_47071268 怎么解决的?

8,756

社区成员

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

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