2 votes

comment désactiver l'événement double-clic lorsque j'utilise les flèches de navigation dans le défilement vertical ?

J'ai une grille de données dans mon application wpf et j'utilise l'événement double-clic de la souris pour afficher les détails de l'élément sélectionné dans la grille de données.

Cependant, j'ai un problème lorsque j'utilise les flèches de navigation du défilement vertical, car il est très courant de cliquer rapidement sur le bouton de la souris et ensuite l'événement du double est déclenché, mais je veux seulement montrer les détails lorsque je fais un double clic dans la ligne de la grille de données, pas dans la flèche de navigation.

Comment désactiver l'événement de double-clic lorsque je clique sur la flèche de navigation ?

Merci.

EDIT : Je trouve une solution qui utilise les liaisons d'entrée de la souris et un geste. Il semble que les liaisons d'entrée ne déclenchent la commande que si je double-clique dans la zone des lignes, et non dans les barres de défilement verticales ou horizontales. Cependant, si le tableau ne comporte que quelques rangées et que vous voyez la zone grise sous la dernière rangée et que je double-clique dans cette zone, l'événement est déclenché. J'aurais donc le même problème, mais je pourrais au moins résoudre le problème lorsque j'utilise les barres de défilement.

La solution est la suivante :

AXML

<DataGrid>
    <DataGrid.InputBindings>
                <MouseBinding Gesture="LeftDoubleClick" Command="{Binding DgdComponentesMouseDoubleClickCommand}" CommandParameter="{Binding ElementName=dgdComponentes, Path=SelectedItems, Mode=OneWay}"/>
                <KeyBinding Key="Enter" Command="{Binding DgdComponentesMouseDoubleClickCommand}" CommandParameter="{Binding ElementName=dgdComponentes, Path=SelectedItems, Mode=OneWay}"/>
    </DataGrid.InputBindings>
</DataGrid>

MODÈLE DE VUE

private RelayCommand<object> _dgdComponentesMouseDoubleClickCommand;
public RelayCommand<object> DgdComponentesMouseDoubleClickCommand
{
    get { return _dgdComponentesMouseDoubleClickCommand ?? (_dgdComponentesMouseDoubleClickCommand = new RelayCommand<Object>(dgdComponentesMouseDoubleClick)); }
}

2voto

Anatoliy Nikolaev Points 10180

Dans ce cas, le gestionnaire d'événement doit être placé directement sur l'icône de l'événement. DataGridRow . Quelque chose comme ça :

Style

<Style BasedOn="{StaticResource {x:Type DataGridRow}}" TargetType="{x:Type DataGridRow}">
    <EventSetter Event="MouseDoubleClick" Handler="SampleDataGrid_MouseDoubleClick" />
</Style>

Handler

private void SampleDataGrid_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
    MessageBox.Show("Out some info...");
}   

J'ai essayé de bloquer l'événement ScrollViewer (e.Handled = true), mais c'est inutile. L'événement est déclenché au même moment, et dans les deux cas la source DataGrid . Apparemment, c'est parce que le ScrollViewer fait partie de la DataGrid .

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