Получить элемент doubleclick event listview

Что мне нужно сделать, чтобы ссылаться на событие двойного щелчка для элемента управления списком?

Я использую что-то вроде этого только для двойного нажатия на ListViewItem, а не для примера, когда вы дважды щелкните заголовок ListView.

private void ListView_MouseDoubleClick(object sender, MouseButtonEventArgs e) { DependencyObject obj = (DependencyObject)e.OriginalSource; while (obj != null && obj != myListView) { if (obj.GetType() == typeof(ListViewItem)) { // Do something here MessageBox.Show("A ListViewItem was double clicked!"); break; } obj = VisualTreeHelper.GetParent(obj); } } 
    

Единственная трудность заключается в том, если вы заинтересованы в базовом объекте, который отображает listviewitem, например

 private void listViewItem_MouseDoubleClick(object sender, MouseButtonEventArgs e) { ListViewItem item = sender as ListViewItem; object obj = item.Content; } 
  private void positionsListView_DoubleClick(object sender, EventArgs e) { if (positionsListView.SelectedItems.Count == 1) { ListView.SelectedListViewItemCollection items = positionsListView.SelectedItems; ListViewItem lvItem = items[0]; string what = lvItem.Text; } } 

Использовать метод ListView.HitTest

  private void listView_MouseDoubleClick(object sender, MouseEventArgs e) { var senderList = (ListView) sender; var clickedItem = senderList.HitTest(e.Location).Item; if (clickedItem != null) { //do something } } 

Или по-старому

  private void listView_MouseDoubleClick(object sender, MouseEventArgs e) { var senderList = (ListView) sender; if (senderList.SelectedItems.Count == 1 && IsInBound(e.Location, senderList.SelectedItems[0].Bounds)) { //Do something } } public bool IsInBound(Point location, Rectangle bound) { return (bound.Y <= location.Y && bound.Y + bound.Height >= location.Y && bound.X <= location.X && bound.X + bound.Width >= location.X); } 

Мне тоже это нужно. Я обнаружил, что на msdn:

http://msdn.microsoft.com/en-us/library/system.windows.forms.listview.activation.aspx

Я думаю, этот делегат для этого.

для меня, я делаю двойной щелчок ListView в этом разделе кода.

  this.listView.Activation = ItemActivation.TwoClick; this.listView.ItemActivate += ListView1_ItemActivate; 

ItemActivate указывает, как пользователь активирует элементы

Когда пользователь делает двойной щелчок, ListView1_ItemActivate будет триггером. Свойство ListView ItemActivate означает доступ к коллекции выбранных элементов.

  private void ListView1_ItemActivate(Object sender, EventArgs e) { foreach (ListViewItem item in listView.SelectedItems) //do something } 

меня устраивает.

У меня пока нет достаточно большого количества баллов репутации, чтобы добавить комментарий, где это было бы очень полезно, но это касается тех, кто спрашивает о решении .Net 4.5.

Вы можете использовать координаты X и Y мыши и метод ListView GetItemAt, чтобы найти элемент, на который был нажат.

 private void ListView_MouseDoubleClick(object sender, MouseButtonEventArgs e) { ListViewItem item = myListView.GetItemAt(eX, eY) // Do something here } 

Я нашел это в Microsoft Dev Center. Он работает правильно и игнорирует двойной щелчок в неправильных местах. Как вы видите, дело в том, что элемент выбирается до запуска события двойного щелчка.

 private void listView1_DoubleClick(object sender, EventArgs e) { // user clicked an item of listview control if (listView1.SelectedItems.Count == 1) { //do what you need to do here } } 

http://social.msdn.microsoft.com/forums/en-US/winforms/thread/588b1053-8a8f-44ab-8b44-2e42062fb663

Вот как получить выбранный объект и код соответствия объекта для элемента с двойным щелчком в представлении WPF:

 ///  /// Get the object from the selected listview item. ///  ///  ///  ///  private object GetListViewItemObject(ListView LV, object originalSource) { DependencyObject dep = (DependencyObject)originalSource; while ((dep != null) && !(dep.GetType() == typeof(ListViewItem))) { dep = VisualTreeHelper.GetParent(dep); } if (dep == null) return null; object obj = (Object)LV.ItemContainerGenerator.ItemFromContainer(dep); return obj; } private void lvFiles_PreviewMouseDoubleClick(object sender, MouseButtonEventArgs e) { object obj = GetListViewItemObject(lvFiles, e.OriginalSource); if (obj.GetType() == typeof(MyObject)) { MyObject MyObject = (MyObject)obj; // Add the rest of your logic here. } } 

Сначала вы можете получить ListView, а затем получить Selected ListViewItem. У меня есть пример для ListBox, но ListView должен быть схожим.

 private void listBox_MouseDoubleClick(object sender, MouseButtonEventArgs e) { ListBox box = sender as ListBox; if (box == null) { return; } MyInfo info = box.SelectedItem as MyInfo; if (info == null) return; /* your code here */ } e.Handled = true; } 

Или используйте событие MouseDoubleClick, а также все события MouseClick имеют число кликов в переменной eventargs ‘e’. Так что если e.ClickCount == 2, то doubleclicked.

В событии DoubleClick ListBox получите элемент selecteditem (s) из списка, и вы там.

 void ListBox1DoubleClick(object sender, EventArgs e) { MessageBox.Show(string.Format("SelectedItem:\n{0}",listBox1.SelectedItem.ToString())); } 

Это раздражает, но лучший способ сделать это – это что-то вроде:

      

Затем в коде:

 public void HookLVIClicked(object sender, RoutedEventArgs e) { var fe = (FrameworkElement)sender; var lvi = (ListViewItem)fe.Tag; lvi.MouseDoubleClick += MyMouseDoubleClickHandler; } 

Имел аналогичную проблему с ListBox, желающим открыть окно (Different View) с SelectedItem как контекстом (в моем случае, поэтому я могу его отредактировать).

Три параметра, которые я нашел, следующие: 1. Код позади 2. Использование привязанных действий 3. Использование i: взаимодействия Blend и взаимодействия с EventToCommand с использованием MVVM-Light.

Я пошел с третьим вариантом, и он выглядит примерно так:

       

Вот и все … при двойном нажатии на элемент, который вы хотите, ваш метод в ViewModel будет вызываться с параметром SelectedItem как, и вы можете делать все, что хотите там 🙂

Отправитель имеет тип ListView, а не ListViewItem.

  private void listViewTriggers_MouseDoubleClick(object sender, MouseEventArgs e) { ListView triggerView = sender as ListView; if (triggerView != null) { btnEditTrigger_Click(null, null); } } 

я вижу, что этот вопрос стоит на google, есть мой простой и рабочий пример 🙂

XAML:

          

C #

  private void MainTCList_MouseDoubleClick(object sender, MouseButtonEventArgs e) { TC item = (TC)MainTCList.Items.CurrentItem; Wyswietlacz.Content = item.UserTID; } 

Wyswietlacz – тестовая метка для просмотра содержимого элемента 🙂 Я добавлю в эту последнюю строку метод загрузки страницы с данными из элемента.

  • программно добавлять столбцы и строки в WPF Datagrid
  • Как получить детей из контейнера WPF по типу?
  • Принудительное рендеринг элемента управления WPF в памяти
  • WPF StringFormat на содержании ярлыков
  • Interesting Posts

    Как определить, какой тип Wi-Fi поддерживается вашим драйвером в Linux

    Как мне управлять тем, что находится в новом контекстном меню в Windows 8?

    Задание печати оставляет очередь, но документ не распечатывается

    Как загрузить файл с помощью библиотеки Volley в android?

    Как стереть свободное место на диске в Linux?

    Подробное сообщение об ошибке 500, ASP + IIS 7.5

    Использование JSON-файла в приложениях для Android-приложений

    Как запустить файлы в C #

    Получить метаданные изображения – Android

    Как конкретно свойство «Специфическая версия» ссылки на сборку работает в Visual Studio?

    Почему git настолько медленный с большими файлами?

    Определение текущего стека вызовов (для диагностических целей)

    Неизвестные драйверы беспроводного USB-адаптера

    iTunes Connect Скриншоты Размеры для всех устройств iOS (iPhone / iPad / Apple Watch)

    Valgrind сообщает об ошибках для очень простой программы на C

    Давайте будем гением компьютера.