/ / DataGrid drückt sich nicht, um in das enthaltende Raster zu passen - wpf, datagrid, grid

DataGrid verhindert, dass es in das enthaltende Raster passt - wpf, datagrid, grid

Ich habe die folgende Struktur in meiner WPF-Anwendung. (Verwenden von Prisma und Regionen)

Fenster ----> UserControl ----> DockPanel ------> Raster (2X2) ------> Row0Col0-- Gitter (2X1) ------> ItemsControl ------> UserControl (wird mit Prism in ItemsControl eingefügt) -----> DockPanel -----> DataGrid (60 Zeilen, 10 Spalten)

Das Verhalten, das ich erwarte, ist das DataGridPasst sich an die Größe der Rasterzelle an und zeigt beide Bildlaufleisten an, da sie zu groß sind, um zu passen. Aber das tut es nicht. Es behält seine maximale Größe bei und schneidet aus den Rändern der Gitterzelle heraus. Alle Zellen beider Raster haben keine Größenangaben (Auto Sized). Wenn ich die Höhe und Breite von Datagrid explizit spezifiziere, sehe ich die Bildlaufleisten, aber das möchte ich natürlich nicht.

Bitte helfen Sie !. Vielen Dank

Ich habe die Screenshots unter folgendem Link gespeichert. http://s1199.photobucket.com/albums/aa467/vikasgoyalgzs/

Antworten:

3 für die Antwort № 1

Sie sagen: "Alle Zellen beider Gitter haben keine Größenangaben (Auto Sized)" - hier liegt das Problem. Wenn die grid Zelle ist auto Größe der grid gibt dem Inhalt in dieser Zelle so viel Platz, wie er will (egal, ob er in das Fenster passt oder nicht) DataGrid in eine sterngroße Zelle.

<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>

<Border Grid.Row="0">
<!-- Content that will take as much space as it wants -->
</Border>

<Border Grid.Row="1">
<!-- Content that will take all the remaining space -->
</Border>
</Grid>

AKTUALISIEREN: Basierend auf den von Ihnen bereitgestellten Screenshots ...

Zuerst das loswerden DockPanel in der obersten Ebene zu steuern. DockPanel gibt seinem Kind den Raum, den es verlangt. Wenn es sich nicht um ein Füllkind handelt (LastChildFill="True"). Benutzen grid Anstatt von DockPanel (d. h. auf der obersten Ebene a grid mit zwei Reihen - eine automatisch für das Menü und die zweite sternförmig für den Rest des Materials, die in dieser sternförmigen Reihe eine andere grid für Sie Artikelkontrollen usw.).

Denken Sie daran, wann immer Sie den Inhalt entweder in eine Zelle mit automatischer Größe in einem Raster oder in ein einfügen DockPanel mit einem anderen Dock-Typ als Fillnimmt der Inhalt so viel Platz ein, wie er benötigt, ohne dass eine Bildlaufleiste angezeigt wird (er geht über das Fenster hinaus).

UPDATE 2: Schauen Sie sich die neuen Screenshots an (siehe Kommentare zu diesem Beitrag) ...

OK, ich denke ich sehe das Problem. Die Sache ist, dass ItemsControl Verwendet StackPanel seine Kinder zu zeigen, aber StackPanel gibt seinen Kindern auch den Raum, den sie wollen DataGrid denkt, dass es genug Platz hat, um sich selbst ohne Bildlaufleisten zu rendern).

Um dies zu beheben, müssen Sie die Steuerelemente für Ihre Elemente in ein einfügen ScrollViewer so was:

<ScrollViewer VerticalScrollBarVisibility="Auto"
HorizontalScrollBarVisibility="Auto">
<ItemsControl ... />
</ScrollViewer>