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 № 1Sie 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 Fill
nimmt 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>