WPF ScrollViewer um DataGrid betrifft Spaltenbreite
Ich habe ein problem mit einem ScrollViewer, dass ich verwenden, um zu Blättern, ein Benutzer-Steuerelement, enthält ein Daten-grid. Ohne die scroll-viewer werden die Spalten füllen das Daten-grid, wie ich will, aber beim hinzufügen eines scroll-viewer werden die Spalten verkleinert, um ~15px. Ich war in der Lage zu vereinfachen, mein layout und immer noch reproduzieren können dieses Verhalten.
Wenn die Bindung des datagrid-Breite auf ein anderes Steuerelement werden die Spalten haben, die Ihre normale, aber das hat unsuprisingly die gleiche Wirkung wie eine Feste Breite in der datagrid-Komponente.
Ich denke, ich bin nicht der erste, der dieses problem hat. Wie kann ich arbeiten, um dieses Verhalten zu haben, mein raster Anpassung der Größe an den verfügbaren Platz und geben Sie die Spalten eine proportionale Breite?
Mit scrollviewer:
und ohne:
<Window x:Class="GridTest.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<ScrollViewer HorizontalScrollBarVisibility="Auto">
<Grid MinWidth="200">
<DataGrid Margin="0" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridCheckBoxColumn Header="Column A" Width="*"/>
<DataGridCheckBoxColumn Header="Column B" Width="*"/>
</DataGrid.Columns>
</DataGrid>
</Grid>
</ScrollViewer>
- Haben Sie versucht, dieses: <DataGrid HorizontalAlignment="Stretch" Eigenschaften "horizontalcontentalignment" ="Stretch" ColumnWidth="*" />
- Ja, Gleiches Ergebnis leider.
- Entfernen HorizontalScrollBarVisibility="Auto" und probieren Sie es aus.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Yeah, ich hatte dieses problem vor einer Weile, Griff ich auf einen workaround, werde ich hier posten nur sofern Ihr nützlich
Der trick war, geben die
DataGrid
eine Breite, in diesem Fall ich, gebunden, Rücken-element enthaltenOder wenn Sie nicht die
HorizontalScrollBar
können Sie es deaktivieren, wird diese ermöglichen es derScrollViewer
zu berechnen, muss die Breite so dass die DataGrid-berechnen der Breite.ScrollContentPresenter
's ActualWidth mit einem RelativeSource binding.<Grid x:Name="grid" MinWidth="400" Width="{Binding Path=ActualWidth, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ScrollContentPresenter}}}"> <DataGrid> <DataGrid.Columns> <DataGridTextColumn Header="Test" Width="*"></DataGridTextColumn> <DataGridTextColumn Header="Test2" Width="*"></DataGridTextColumn> <DataGridTextColumn Header="Test3" Width="*"></DataGridTextColumn> </DataGrid.Columns> </DataGrid> </Grid>
Erlebte ich die gleiche Sache Letzte Woche.
Dieses problem tritt normalerweise, wenn Sie die folgenden Elemente :
DataGrid
mit undefinierten Breite platziertScrollViewer
mit derHorizontalScrollBarVisibility
- Eigenschaft aufAuto
DataGridColumn
hat eine unbegrenzte/undefined Breite (e.g :Width="*"
)Eigentlich ist die Lösung hängt von Ihren Bedürfnissen ab :
DataGridColumns
alle den verfügbaren Speicherplatz IhrerDataGrid
wenn das Fenster zeigt (selbst wenn es keinen angezeigten Daten) : in diesem Fall sa_ddam213's Antwort kann Ihnen helfen, zu bewältigen.DataGrid
rechten Rand des Fensters in der ersten show.Für die Letzte option, die Sie gerade benötigen, um eine Feste Breite für Ihr
DataGridColumns
(oder eben nicht definieren, wenn Sie es nicht wollen, das ist nicht sehr wichtig, da die Spalten können leicht durch den Benutzer geändert durch Doppelklick). In diesem Zusammenhang wird dieDataGrid
definiert werden können, ohne eine Breite.Hier ist ein Beispiel :
Durch diese Weise, wenn eine Spalte content läuft über den container nach einer Spalte auto-Größenänderung, wird eine horizontale Bildlaufleiste angezeigt wird.