Obtener el evento doubleclick de elemento de listview

¿Qué debo hacer para hacer referencia al evento de doble clic para un control de vista de lista?

Estoy usando algo así para activar solo en ListViewItem, haga doble clic y no por ejemplo cuando hace doble clic en el encabezado de 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); } } 
    

La única dificultad es, entonces, si está interesado en el objeto subyacente al que se asigna el punto de vista de la lista, p. Ej.

 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; } } 

Use el método 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 } } 

O la vieja manera

  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); } 

Lo necesitaba también. Lo encontré en msdn:

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

Creo que este delegado es por eso.

para mí, hago doble clic en ListView en esta sección de código.

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

ItemActivate especifica cómo el usuario se activa con los elementos

Cuando el usuario hace doble clic, se activará ListView1_ItemActivate. Propiedad de ListView ItemActivate se refiere a acceder a la colección de elementos seleccionados.

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

esto funciona para mi.

Todavía no tengo un puntaje de reputación lo suficientemente grande como para agregar un comentario donde sería más útil, pero esto está en relación con aquellos que preguntan sobre una solución .Net 4.5.

Puede usar las coordenadas X e Y del mouse y el método ListView GetItemAt para encontrar el elemento sobre el que se ha hecho clic.

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

Encontré esto en Microsoft Dev Center. Funciona correctamente e ignora hacer doble clic en lugares incorrectos. Como puede ver, el punto es que un elemento se selecciona antes de que se active el evento de doble clic.

 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

Aquí se muestra cómo obtener el objeto seleccionado y el código de coincidencia de objetos para el elemento de vista de lista con doble clic en una vista de lista de 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. } } 

Primero puede obtener ListView y luego obtener el ListViewItem seleccionado. Tengo un ejemplo para ListBox, pero ListView debería ser similar.

 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; } 

Utilice el evento MouseDoubleClick y, además, todos los eventos MouseClick tienen un recuento de clics en la variable eventargs ‘e’. Entonces, si e.ClickCount == 2, entonces doble clic.

En el evento ListBox DoubleClick, obtenga el miembro de los elementos seleccionados del cuadro de lista, y allí está.

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

Es molesto, pero la mejor manera de hacerlo es algo así como:

      

Luego en el código:

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

Estaba teniendo un problema similar con un ListBox que desea abrir una ventana (vista diferente) con el elemento seleccionado como el contexto (en mi caso, para poder editarlo).

Las tres opciones que he encontrado son: 1. Código detrás 2. Usar comportamientos vinculados 3. Usar Blend’s i: Interaction y EventToCommand usando MVVM-Light.

Fui con la tercera opción, y se ve algo en esta línea:

       

Eso es todo … cuando haces doble clic en el elemento que deseas, tu método en el modelo de vista se llamará con el elemento seleccionado como parámetro y podrás hacer lo que quieras allí 🙂

El remitente es de tipo ListView no ListViewItem.

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

veo que este tema es muy importante en Google, está mi muestra simple y funcional 🙂

XAML:

          

DO#

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

Wyswietlacz es una etiqueta de prueba para ver el contenido del elemento 🙂 Agregué aquí en esta última línea un método para cargar la página con los datos del artículo.