Ho appena iniziato a sperimentare i gridsplitters e sono incappato in un comportamento molto strano e non riesco a risolverlo. Apparentemente gli altri hanno problemi simili (secondo google), ma non ci sono stati commenti utili.Gridsplitter: limita le altezze delle file alle dimensioni della finestra
Ho una griglia con 2 righe. All'avvio, quello in basso ha uno Hight
di 250. La riga superiore prende il resto con *
. Quando ridimensiono le righe con lo splitter, il comportamento è come previsto per la riga superiore. Ma quando trascino lo splitter verso l'alto e oltre la finestra del programma, il contenuto della riga in basso uscirà dalla finestra (= sposta verso il basso fino a quando non è sparito). Mi aspetto che non possa rendere ogni riga più grande del contenitore genitore.
<Grid x:Name="grid_main" ScrollViewer.VerticalScrollBarVisibility="Disabled" >
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition MinHeight="250" Height="250"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<GridSplitter x:Name="splitter"
ResizeDirection="Rows" Grid.Column="0" Grid.ColumnSpan="1" Grid.Row="0" Width="Auto"
Height="5" HorizontalAlignment="Stretch" VerticalAlignment="Bottom" Margin="0" ResizeBehavior="BasedOnAlignment" />
<Grid Grid.Column="0" Grid.Row="0">
</Grid>
<Grid Grid.Column="0" Grid.Row="1">
</Grid>
</Grid>
Questo è il mio codice. Il contenuto di entrambe le righe è nuovamente ospitato nelle griglie ed è stato rimosso per semplicità. Ancora: il ridimensionamento per la riga superiore funziona correttamente. Ma la riga inferiore può essere ridimensionata all'infinito. Funziona come previsto se indico un codice fisso a MaxHeight
. Ma questo deve dipendere dalle dimensioni della finestra.
Grazie per la risposta. Che funzioni. Ma implementare un 'MinHeight' per la fila in alto si rivela ... difficile ... Quando si ha a che fare con WPF, di solito lo maledicono e ad un certo punto ho una soluzione davvero elegante che mi fa pensare" Wow , WPF è davvero fantastico, dopo tutto ". Non sono sicuro che raggiungerò questo punto su questo argomento ... – Jan
So cosa intendi, mi sento allo stesso modo un sacco di tempo. C'è una soluzione per definire un MinHeight per la riga superiore, che sia elegante o meno discutibile! Se si utilizza un MultiValueConverter, è possibile passare a ActualHeight of the Grid come prima e la riga in alto MinHeight e restituire la differenza. Usa questo valore come altezza massima sulla seconda riga. –
Ho usato un 'IValueConverter' per applicare l'offset. – Peter