View Full Version : [WPF] Visualizzare ScrollBar Verticale in un DataGrid
robertino_salemi
05-05-2015, 12:08
Buongiorno,
ho il seguente codice:
<Grid VerticalAlignment="Top">
<Grid.RowDefinitions>
<RowDefinition Height="50" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<!-- Toolbar Command -->
<StackPanel Orientation="Horizontal" Margin="0,0,0,0" Visibility="Visible" Grid.Row="0">
[MY CONTENT]
</StackPanel>
<StackPanel Grid.Row="1">
<DataGrid Name="dgSample" --MY PROPERTY--
ScrollViewer.CanContentScroll="True"
ScrollViewer.VerticalScrollBarVisibility="Auto"
ScrollViewer.HorizontalScrollBarVisibility="Auto">
<DataGrid.Columns>
...
</DataGrid.Columns>
</DataGrid>
</StackPanel>
</Grid>
Nella Grid ho:
- la prima riga con altezza 50
- la seconda riga con altezza * così da vedere i dati per la dimensione della finestra disponibile
Come faccio a visualizzare la scrollbar visto che non ho fissato l'altezza al DataGrid?
Grazie.
[Kendall]
05-05-2015, 14:22
Buongiorno,
ho il seguente codice:
<Grid VerticalAlignment="Top">
<Grid.RowDefinitions>
<RowDefinition Height="50" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<!-- Toolbar Command -->
<StackPanel Orientation="Horizontal" Margin="0,0,0,0" Visibility="Visible" Grid.Row="0">
[MY CONTENT]
</StackPanel>
<StackPanel Grid.Row="1">
<DataGrid Name="dgSample" --MY PROPERTY--
ScrollViewer.CanContentScroll="True"
ScrollViewer.VerticalScrollBarVisibility="Auto"
ScrollViewer.HorizontalScrollBarVisibility="Auto">
<DataGrid.Columns>
...
</DataGrid.Columns>
</DataGrid>
</StackPanel>
</Grid>
Nella Grid ho:
- la prima riga con altezza 50
- la seconda riga con altezza * così da vedere i dati per la dimensione della finestra disponibile
Come faccio a visualizzare la scrollbar visto che non ho fissato l'altezza al DataGrid?
Grazie.
Togli lo stackpanel, visto che contiene solo la datagrid. Così dovrebbe funzionare.
robertino_salemi
05-05-2015, 14:48
Ciao Kendall,
già provato, se non setto un'altezza minima al DataGrid non riesco a visualizzare lo scrollbar verticale...
[Kendall]
05-05-2015, 16:52
Ciao Kendall,
già provato, se non setto un'altezza minima al DataGrid non riesco a visualizzare lo scrollbar verticale...
L'altezza viene già determinata ponendo l'altezza della relativa riga della GridView a 1*, e le dimensioni della DataGrid in Auto (che dallo stralcio di xaml che hai riportato sembra proprio quello che hai fatto).
Quello che non mi torna è appunto l'uso dello StackPanel. NON deve esserci, ci pensa la DataGrid ad eseguire il layout dei suoi componenti, ed essendo che lo stack panel fornisce spazio indefinito ai suoi figli, questo farà credere al datagrid di avere spazio infinito e pertanto non mostrerà mai le barre di scorrimento.
Quindi, fermo restando quanto detto (togli lo stackpanel), il problema va cercato altrove. Prova prima di tutto ad eliminare queste proprietà dalla datagrid:
ScrollViewer.CanContentScroll="True"
ScrollViewer.VerticalScrollBarVisibility="Auto"
ScrollViewer.HorizontalScrollBarVisibility="Auto"
Non dovrebbero esserci (la DataGrid gestisce già interamente una ScrollView e il contenuto è impostato per scrollare in automatico).
Prova ad eliminarle e fammi sapere.
robertino_salemi
05-05-2015, 17:00
Kendall,
ho risolto, ho rimosso lo StackPanel che contiene la griglia, ma ho dovuto inserirla in un DockPanel.
Lo StackPanel non dovrebbe 'gestire' altezze fisse, mentre il DockPanel si, adesso funziona... :)
Grazie come sempre! ;)
[Kendall]
05-05-2015, 17:06
Kendall,
ho risolto, ho rimosso lo StackPanel che contiene la griglia, ma ho dovuto inserirla in un DockPanel.
Lo StackPanel non dovrebbe 'gestire' altezze fisse, mentre il DockPanel si, adesso funziona... :)
Grazie come sempre! ;)
Robertino, fidati, non serve neppure la DockPanel (vai solo a complicare la struttura visuale del tuo programma, senza alcun vantaggio: un pannello con un unico figlio non serve a niente).
Hai provato ad inserire come ti ho detto la DataGrid dentro al GridView genitore e a togliere quelle proprietà che ti avevo indicato prima?
[Kendall]
05-05-2015, 17:10
Per capirci:
<Grid VerticalAlignment="Top">
<Grid.RowDefinitions>
<RowDefinition Height="50" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<!-- Toolbar Command -->
<StackPanel Orientation="Horizontal" Margin="0,0,0,0" Visibility="Visible" Grid.Row="0">
[MY CONTENT]
</StackPanel>
<DataGrid Name="dgSample" Grid.Row="1">
<DataGrid.Columns>
...
</DataGrid.Columns>
</DataGrid>
</Grid>
robertino_salemi
06-05-2015, 08:44
Kendall, hai perfettamente ragione, testato questa mattina, funziona perfettamente. :D
Grazie come sempre!
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.