2017-07-17 3 views
1

Je veux faire défiler la datagrid lorsque sa longueur est supérieure à la stackpanel, donc j'ai essayé ceci:Comment faire pour faire défiler la grille de données dans stackpanel?

<StackPanel Orientation="Horizontal">       
    <ScrollViewer VerticalScrollBarVisibility="Auto" CanContentScroll="True"> 
     <DataGrid Name="dgConfig" VerticalAlignment="Stretch" AutoGenerateColumns="False"> 
      <DataGrid.Columns> 
       ... 
      </DataGrid.Columns> 
     </DataGrid> 
    </ScrollViewer>         
</StackPanel> 

Mais cela ne fonctionne pas, je l'ai cherché sur ce web et échoué à trouver des solutions avaiable. Alors, comment dois-je résoudre ce problème? Merci!

+0

Utilisez-vous d'autres panneaux tels que la grille ou le panneau d'ancrage? –

+0

[Comment ajouter un ScrollBar à un Stackpanel] (https://stackoverflow.com/questions/6250240/how-to-add-a-scrollbar-to-a-stackpanel) –

+0

Comment se comporte votre exemple de code? La hauteur de StackPanel est-elle augmentée au lieu d'afficher la barre de défilement? – opewix

Répondre

1

ScrollViewers et StackPanels ne fonctionnent pas très bien ensemble depuis un StackPanel mesure ses éléments enfants avec un espace horizontal infini si sa propriété Orientation est définie sur Horizontal et infini espace vertical si elle est réglée sur Vertical.

Vous aurez soit à spécifier une hauteur pour le StackPanel:

<StackPanel Orientation="Horizontal" Height="100"> 

Si vous ne pas que cela aura une hauteur infinie et c'est la raison pour laquelle vous ne voyez pas les barres de défilement.

L'autre, et bien meilleure option, serait de se débarrasser du StackPanel et d'utiliser un autre Panel qui ne mesure pas ses éléments enfants avec un espace infini.

Le DataGrid a son propre ScrollViewer intégré, vous n'avez donc pas besoin de le placer à l'intérieur d'un élément ScrollViewer. Débarrassez-vous des StackPanel (s) et le ScrollViewer:

<DataGrid Name="dgConfig" VerticalAlignment="Stretch" AutoGenerateColumns="False" 
          VerticalScrollBarVisibility="Auto"> 
    <DataGrid.Columns> 
     ... 
    </DataGrid.Columns> 
</DataGrid> 
+0

C'est une spécification très utile. – BarryLib

0

essayez d'ajouter VerticalScrollBarVisibility = "Auto", ScrollViewer.CanContentScroll = "True" à la propriété dataagrid.

0

DockPanel au lieu de StackPanel fonctionne pour moi.