2008-11-10 7 views
1

je place les énoncés suivants dans la deuxième rangée de ma grille dans le XAML:barre de défilement vertical ne semble pas lorsque les éléments gridview ont dépassé la hauteur d'affichage

<ScrollViewer VerticalScrollBarVisibility="Auto" Grid.Row="1"> 
    <ListView Name="listView" Margin="5" Grid.Row="1"> 

       <ListView.View> 
        <GridView AllowsColumnReorder="True"> 
         <GridViewColumn DisplayMemberBinding="{Binding Path=DateTime}" Header="Date Time" Width="140"/> 
         <GridViewColumn DisplayMemberBinding="{Binding Path=Vehicle}" Header="Vehicle" Width="130"/> 
         <GridViewColumn DisplayMemberBinding="{Binding Path=AlarmType}" Header="Alarm Type" Width="100"/> 
         <GridViewColumn DisplayMemberBinding="{Binding Path=Direction}" Header="Direction" Width="100"/> 
         <GridViewColumn DisplayMemberBinding="{Binding Path=Speed}" Header="Speed" Width="100"/> 
         <GridViewColumn DisplayMemberBinding="{Binding Path=Alarmed}" Header="Alarmed" Width="100"/> 
         <GridViewColumn DisplayMemberBinding="{Binding Path=LoadType}" Header="Load Type" Width="100"/> 
         <GridViewColumn DisplayMemberBinding="{Binding Path=Status}" Header="Status" Width="110"/> 
        </GridView> 
       </ListView.View> 
      </ListView>  
     </ScrollViewer> 
</Grid> 

Je binded le listView.ItemSource à un ObservableCollection défini dans le code pour remplir les données de la liste. Lorsque le nombre d'éléments ajoutés à GridView a dépassé la hauteur de la liste, la barre de défilement verticale n'apparaissait pas comme indiqué dans le code XAML. Qu'ai-je fait de mal? Votre contribution est grandement appréciée. Je vous remercie.

Répondre

3

Vérifiez que les marges et les paddings sont corrects. La barre de défilement peut être derrière quelque chose.

Mettez la hauteur du conteneur extérieur avec une valeur fixe, il peut être étirement ListView donc il ne sera jamais montrer la barre de défilement.

HTH

+0

Merci Artur. Votre suspection a été corrigée. Je l'ai eu pour travailler maintenant. –

+0

Que dois-je faire lorsque je ne connais pas la hauteur de la fenêtre/du conteneur au moment de la conception? Ma fenêtre peut être agrandie et redimensionnée par exemple, alors comment puis-je appliquer votre solution même sans connaître la hauteur dynamique que ma fenêtre/conteneur aura à l'exécution? –

6

Il fonctionne pour moi:

<Window x:Class="WpfApplication1.Window1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="Window1" Height="300" Width="300"> 
    <Grid> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="*"/> 
      <RowDefinition Height="*"/> 
     </Grid.RowDefinitions> 

     <ScrollViewer VerticalScrollBarVisibility="Auto" Grid.Row="1"> 
      <ListView Name="listView" Margin="5" Grid.Row="1"> 

       <ListView.View> 
        <GridView AllowsColumnReorder="True"> 
         <GridViewColumn DisplayMemberBinding="{Binding Path=.}" Header="Whatever" Width="140"/> 
        </GridView> 
       </ListView.View> 
      </ListView> 
     </ScrollViewer> 
    </Grid> 
</Window> 

Cependant, le modèle de contrôle ListView contient une ScrollViewer déjà telle que la ScrollViewer apparaît à l'intérieur l'ListView en fonction des besoins. Pourquoi avez-vous besoin d'envelopper dans un autre?

+0

Merci Kent, j'ai supprimé une colonne inutilisée dans ma listview et la barre de défilement montrée (sans le second scrollviewer). –

0

Pas besoin d'utiliser ScrollViewer. Supprimez simplement le ScrollViewer et utilisez uniquement le ListView et essayez.

ListView listView = new ListView(); 
listView.SetValue(Grid.RowProperty, 1); 
listView.SetValue(Grid.ColumnProperty, 1); 
MainGrid.Children.Add(listView); 

Pas besoin de spécifier la largeur et la hauteur de la liste.

0
<Grid x:Name="MainMenuButtonGrid"> 
    <StackPanel Margin="50,0,0,0"> 
    <TextBlock Text="Please select any employee" Foreground="Wheat"/> 
    <ListView x:Name="listEmployeeDetail" SelectedValuePath="EmployeeID"> 
     <ListView.View> 
     <GridView> 
      <GridViewColumn Header="EmployeeName" Width="100" DisplayMemberBinding="{Binding EmployeeName}"></GridViewColumn> 
     </GridView> 
     </ListView.View> 
    </ListView> 
    </StackPanel> 
</Grid> 
1

Essayez ce code:

ListView listView = new ListView(); 
listView.SetValue(Grid.RowProperty, 1); 
listView.SetValue(Grid.ColumnProperty, 1); 
MainGrid.Children.Add(listView); 
Questions connexes