11 votes

Comment désactiver le défilement à l'intérieur d'une grille de données dans wpf c#

J'ai fait VerticalScrollBarVisibility="Disabled" parce que je ne veux pas que le contenu de la grille de données soit affiché au-delà de la hauteur assignée. Je ne peux pas voir la barre de défilement après avoir donné la déclaration ci-dessus, mais je peux toujours faire défiler vers le bas et voir les lignes. Merci de votre compréhension.

8voto

Mohamed Mansour Points 18019

L'approche correcte consisterait à désactiver la cible Hit

DataGrid.IsHitTestVisible = false;

6voto

Mohammad Sepahvand Points 5377

Une fois que vous avez désactivé le VerticalScrollBarVisibility pour votre DatGrid, vous devez désactiver la fonctionnalité de défilement du ScrollViewer comme suit :

ScrollViewer.CanContentScroll="False"

Mais lorsque vous le faites, assurez-vous que vous avez déjà défini une hauteur standard pour l'ensemble de votre DataGrid et pour les lignes de votre DataGrid de manière à ce que l'utilisateur puisse voir toutes les lignes que vous voulez qu'il voie, sinon les lignes coupées ne seront pas affichées et l'utilisateur ne pourra pas faire défiler la page vers le bas pour les voir.

J'espère que cela vous aidera.

4voto

Lu55 Points 2339

Permet à la grille de données d'afficher tout son contenu (sans barre de défilement) :

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto" />
    </Grid.RowDefinitions>
    <DataGrid x:Name="DataGrid" />
</Grid>

Vous pouvez ensuite placer le résultat à n'importe quel endroit. Il se réduira aux dimensions du propriétaire.

2voto

LorenzoB Points 31

La solution acceptée n'a pas fonctionné pour moi car j'avais besoin d'une sélection de lignes. J'ai résolu tous mes problèmes en désactivant le panoramique de la grille de données (pour le glissement de la souris) et en gérant les événements "key down" (pour le clavier). Dans la grille de données XAML :

ScrollViewer.PanningMode="None"

Et.. :

PreviewKeyDown="OnDatagridPreviewKeyDown"

Dans le code derrière :

private void OnDatagridPreviewKeyDown(object sender, KeyEventArgs e)
{
    if (e.Key == Key.Right || e.Key == Key.Left)
        e.Handled = true;
}

HTH.

Edit : Ma réponse s'applique aux colonnes mais tout est similaire pour les lignes.

0voto

ouflak Points 1206

Je voulais simplement ajouter une réponse qui s'applique aux colonnes. Il peut arriver que la grille de données défile jusqu'à des colonnes supplémentaires que vous préféreriez voir invisibles, en particulier si la hauteur est spécifiquement ajustée pour que les colonnes supplémentaires soient invisibles. J'ai simplement attaché un gestionnaire Loaded à la grille de données et j'ai fixé toutes les colonnes supplémentaires à une largeur de 0 et je les ai rendues invisibles.

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