Cosa devo fare per fare riferimento all'evento doppio clic per un controllo listview?Ottieni l'evento doubleclick di listview
risposta
Sto usando qualcosa del genere per attivare solo su ListViewItem doppio clic e non per esempio quando si fa doppio clic sull'intestazione del 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);
}
}
Questo non funziona più in .net 4.5. MouseButtonEventArgs non ha una fonte (originale). – Harmen
@Harmen qualsiasi soluzione in *** *** 4,5 ***? –
Ecco una soluzione basata su eventi del ListViewItem: https://stackoverflow.com/questions/728205/wpf-listview-attaching-a-double-click-on-an-item-event – Kosau
Nell'evento ListBox DoubleClick ottenere il membro selecteditem della casella di riepilogo, e ci sei.
void ListBox1DoubleClick(object sender, EventArgs e)
{
MessageBox.Show(string.Format("SelectedItem:\n{0}",listBox1.SelectedItem.ToString()));
}
Se utilizzo l'evento doppio clic di ListBox, posso fare doppio clic in qualsiasi punto della listview e se verrà selezionato qualsiasi elemento selezionato. Non ne ho bisogno. Ho bisogno dell'elemento cliccato solo su quando è stato fatto doppio clic. – Sauron
Questo non funziona, perché si noteranno i doppi clic sulla barra di scorrimento o altri luoghi scomodi –
O utilizzare l'evento MouseDoubleClick, e anche, tutti gli eventi click del mouse hanno un numero di clic nelle EventArgs variabile 'E'. Quindi, se e.ClickCount == 2, quindi doppio clic.
E 'fastidioso, ma il modo migliore per farlo è qualcosa di simile:
<DataTemplate Name="MyCoolDataTemplate">
<Grid Loaded="HookLVIClicked" Tag="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListViewItem}}}">
<!-- your code here -->
</Grid>
</DataTemplate>
Poi nel codice:
public void HookLVIClicked(object sender, RoutedEventArgs e) {
var fe = (FrameworkElement)sender;
var lvi = (ListViewItem)fe.Tag;
lvi.MouseDoubleClick += MyMouseDoubleClickHandler;
}
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<EventSetter Event="MouseDoubleClick" Handler="listViewItem_MouseDoubleClick" />
</Style>
</ListView.ItemContainerStyle>
L'unica difficoltà è allora se si sono interessati all'oggetto sottostante, ad esempio le mappe listviewitem
private void listViewItem_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
ListViewItem item = sender as ListViewItem;
object obj = item.Content;
}
Questo non ha funzionato per me su .NET 3.5 (VS 2008). Tuttavia, PreviewMouseDoubleClick ha funzionato. Ha qualcosa a che fare con l'evento che bolle. – NickV
Questo funziona per me in .net 3.5, tuttavia se si verificano problemi con l'evento che bolle in alto è possibile aggiungere e.Handled = true; per impedirgli di andare oltre questo metodo. – esde84
Funziona perfettamente in .NET 4.5 e 4.6. –
Anche io ne avevo bisogno. L'ho trovato su msdn:
http://msdn.microsoft.com/en-us/library/system.windows.forms.listview.activation.aspx
Penso che questo delegato sia per quello.
Questo è per il controllo ListView in Windows Form. Il controllo ListView WPF si trova in System.Windows.Controls. – skst
L'ho trovato su Microsoft Dev Center. Funziona correttamente e ignora il doppio clic nei posti sbagliati. Come vedi, il punto è che un elemento viene selezionato prima che venga attivato l'evento del doppio 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
Questo non ignora il doppio clic nei posti sbagliati in .net 4.5 o superiore. Se selezioni un elemento e fai doppio clic da qualche altra parte, agisci sull'elemento selezionato con questo codice. –
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;
}
}
'ListViewItem lvItem = positionsListView.SelectedItems [0];' è più ordinato – BaSsGaz
stava avendo un problema simile con un ListBox voler aprire una finestra (Different View) con la SelectedItem come il contesto (nel mio caso, così posso modificarlo).
Le tre opzioni che ho trovato sono: 1. Codice dietro 2. Utilizzo dei comportamenti associati 3. Utilizzo di Blend i: Interaction ed EventToCommand utilizzando MVVM-Light.
sono andato con l'opzione 3, e sembra qualcosa in queste righe:
<ListBox x:Name="You_Need_This_Name"
ItemsSource="{Binding Your_Collection_Name_Here}"
SelectedItem="{Binding Your_Property_Name_Here, UpdateSourceTrigger=PropertyChanged}"
... rest of your needed stuff here ...
>
<i:Interaction.Triggers>
<i:EventTrigger EventName="MouseDoubleClick">
<Command:EventToCommand Command="{Binding Your_Command_Name_Here}"
CommandParameter="{Binding ElementName=You_Need_This_Name,Path=SelectedItem}" />
</i:EventTrigger>
</i:Interaction.Triggers>
che su di esso ... quando si fa doppio clic sulla voce che si desidera, sarà chiamato il metodo sul ViewModel con SelectedItem come parametro, e puoi fare quello che vuoi lì :)
per me, faccio doppio clic su ListView in questa sezione di codice.
this.listView.Activation = ItemActivation.TwoClick;
this.listView.ItemActivate += ListView1_ItemActivate;
ItemActivate specify how user activate with items
Quando l'utente fa doppio clic, ListView1_ItemActivate sarà grilletto. Proprietà di ListView ItemActivate fa riferimento all'accesso alla raccolta di elementi selezionati.
private void ListView1_ItemActivate(Object sender, EventArgs e)
{
foreach (ListViewItem item in listView.SelectedItems)
//do something
}
funziona per me.
Ecco come ottenere l'oggetto selezionato e il codice oggetto corrispondente per il doppio elemento listview clic in una lista WPF:
/// <summary>
/// Get the object from the selected listview item.
/// </summary>
/// <param name="LV"></param>
/// <param name="originalSource"></param>
/// <returns></returns>
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.
}
}
Il mittente è di tipo ListView non ListViewItem.
private void listViewTriggers_MouseDoubleClick(object sender, MouseEventArgs e)
{
ListView triggerView = sender as ListView;
if (triggerView != null)
{
btnEditTrigger_Click(null, null);
}
}
Utilizzare il metodo di 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 il vecchio modo
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);
}
Non vedo e.Location come membro nel MSDN o con il mio compilatore. –
È possibile ottenere il ListView prima, e quindi ottenere il ListViewItem selezionati. Ho un esempio per ListBox, ma ListView dovrebbe essere simile.
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;
}
io non ho ancora un grande punteggio abbastanza reputazione per aggiungere un commento in cui sarebbe più utile, ma questo è in relazione a coloro che chiedono di una soluzione di 4.5 .Net.
È possibile utilizzare il mouse X e coordinate Y e il metodo ListView getItemAt di trovare la voce che è stato cliccato.
private void ListView_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
ListViewItem item = myListView.GetItemAt(e.X, e.Y)
// Do something here
}
vedo questo argomento è alto su Google, v'è il mio campione semplice e di lavoro :)
XAML:
<ListView Name="MainTCList" HorizontalAlignment="Stretch" MinHeight="440" Height="Auto" Margin="10,10,5.115,4" VerticalAlignment="Stretch" MinWidth="500" Width="Auto" Grid.Column="0" MouseDoubleClick="MainTCList_MouseDoubleClick" IsSynchronizedWithCurrentItem="True">
<ListView.View>
<GridView>
<GridViewColumn Header="UserTID" DisplayMemberBinding="{Binding UserTID}" Width="80"/>
<GridViewColumn Header="Title" DisplayMemberBinding="{Binding Title}" Width="410" />
</GridView>
</ListView.View>
</ListView>
C#
private void MainTCList_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
TC item = (TC)MainTCList.Items.CurrentItem;
Wyswietlacz.Content = item.UserTID;
}
Wyswietlacz è un test Etichetta per vedere il contenuto dell'elemento :) Aggiungo qui in quest'ultima riga un metodo per caricare la pagina con i dati dell'elemento.
- 1. DoubleClick su una riga in ListView
- 2. Ottieni posizione in ListView
- 3. FileDialog DoubleClick Behavior
- 4. ToolStripStatusLabel DoubleClick non funziona?
- 5. Ottieni il valore dell'articolo su OnItemClick Listview
- 6. Ottieni posizione vista assoluta in ListView
- 7. Jquery .on con l'evento DoubleClick
- 8. Elemento della griglia di proprietà e DoubleClick
- 9. WPF StackPanel con clic e DoubleClick
- 10. Firma Doubleclick Floodlight utilizzando Gestore eventi Onclick
- 11. C# datagridview doubleclick su riga con FullRowSelect
- 12. Android ListView: ottieni l'indice dei dati dell'oggetto visibile
- 13. Ottieni il valore dei dati da ListView ItemDataBound
- 14. Ottieni dati associati a ListView su evento DataBound
- 15. Ottieni un elemento selezionato in listview quando generi menu contestuale
- 16. C# Differenza di Winform tra evento DoubleClick e evento MouseDoubleClick
- 17. Selenium 2.0 WebDriver Advcanced Interactions Guida di DoubleClick (C#)
- 18. non valido 'X-Frame-Options' dalla risposta Doubleclick di Google
- 19. ListView all'interno di un altro ListView
- 20. ListBox con DoubleClick su elementi che utilizzano DataTemplate
- 21. Come aggiungere l'evento doubleclick all'elemento Canvas usando il metodo "AddEventListener"?
- 22. Associare il comando DoubleClick da DataGrid Row a VM
- 23. Come caricare annunci DoubleClick lungo il contenuto dinamico laterale
- 24. ViewPager all'interno di ListView
- 25. ottimizzazione di RecyclerView/ListView
- 26. listView orizzontale all'interno verticale Listview in QML
- 27. Margini ListView
- 28. Android: filtro di SimpleCursorAdapter ListView
- 29. Problema di background ListView personalizzato
- 30. Esempio complesso di ListView getItemViewType()
probabilmente si desidera associare all'evento doppio clic dell'elemento? – TheVillageIdiot