87 votes

WPF ListView: l'ajout d'un double-clic sur un élément) de l'événement

J'ai le texte suivant ListView:

<ListView Name="TrackListView">
    <ListView.View>
        <GridView>
            <GridViewColumn Header="Title" Width="100" HeaderTemplate="{StaticResource BlueHeader}" DisplayMemberBinding="{Binding Name}"/>
            <GridViewColumn Header="Artist" Width="100" HeaderTemplate="{StaticResource BlueHeader}" DisplayMemberBinding="{Binding Album.Artist.Name}" />
        </GridView>
    </ListView.View>
</ListView>

Ma question est, comment puis-je joindre un événement lié à chaque élément feu sur double-cliquant sur l'élément?

114voto

Andreas Grech Points 39188

Trouvé la solution ici: http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/3d0eaa54-09a9-4c51-8677-8e90577e7bac/


XAML:

<UserControl.Resources>
    <Style x:Key="itemstyle" TargetType="{x:Type ListViewItem}">
        <EventSetter Event="MouseDoubleClick" Handler="HandleDoubleClick" />
    </Style>
</UserControl.Resources>

<ListView Name="TrackListView" ItemContainerStyle="{StaticResource itemstyle}">
    <ListView.View>
        <GridView>
            <GridViewColumn Header="Title" Width="100" HeaderTemplate="{StaticResource BlueHeader}" DisplayMemberBinding="{Binding Name}"/>
            <GridViewColumn Header="Artist" Width="100" HeaderTemplate="{StaticResource BlueHeader}" DisplayMemberBinding="{Binding Album.Artist.Name}" />
        </GridView>
    </ListView.View>
</ListView>

C#:

protected void HandleDoubleClick(object sender, MouseButtonEventArgs e)
{
    var track = ((ListViewItem) sender).Content as Track; //Casting back to the binded Track
}

86voto

epox_spb Points 281

Pas de fuites de mémoire, fonctionne très bien:

XAML:

<ListView ItemsSource="{Binding TrackCollection}" MouseDoubleClick="ListView_MouseDoubleClick" />

C#:

    void ListView_MouseDoubleClick(object sender, MouseButtonEventArgs e)
    {
        var item = ((FrameworkElement) e.OriginalSource).DataContext as Track;
        if (item != null)
        {
            MessageBox.Show("Item's Double Click handled!");
        }
    }

1voto

sipwiz Points 15291

Dans votre exemple vous essayer de l'attraper lorsqu'un élément dans votre liste est sélectionné ou lorsque un en-tête de colonne est cliqué sur? Si c'est la première vous souhaitez ajouter un SelectionChanged gestionnaire.

<ListView Name="TrackListView" SelectionChanged="MySelectionChanged">

Si c'est le dernier que vous auriez à utiliser une combinaison de MouseLeftButtonUp ou MouseLeftButtonDown événements sur le GridViewColumn éléments pour détecter un double clic et prendre les mesures appropriées. Vous pouvez également gérer les événements sur le contrôle GridView et à partir de là, qui en-tête de colonne a été sous la souris.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X