WPF, vertikales Strecken funktioniert wie erwartet!

7

Ich versuche, die vertikale Dehnung so zu gestalten, dass sie erwartungsgemäß funktioniert, aber aus irgendeinem Grund braucht sie nur den benötigten Platz und nicht den verfügbaren Platz.

Zuerst verwende ich WPF mit C # und Prism.

In der Shell.xaml (Haupt-XAML für die Anwendung) habe ich ein Raster mit 2 Spalten und einer Zeile. Die Idee ist, eine Seitenwand und einen Haupt-App-Bereich zu haben. Das Haupt-App-Bereichsraster ist auf Auto Width und Auto Height eingestellt. Dies funktioniert wie erwartet, und es skaliert, um die gesamte Anwendung in Höhe und Breite anzupassen.

Dann benutze ich prism, um die Ansicht (als UserControl-Komponente) in den Haupt-App-Bereich einzufügen. Das UserControl wird auch auf Auto Width und Height festgelegt, und die HorizontalAlignment und die VerticalAlignment werden auf die Standardeinstellungen in Expression Blend festgelegt, um zu strecken!

Allerdings lädt das prisma geladene UserControl nur in Breite und nicht in Höhe! Wenn ich dies als Hintergrundfarbe für visuelle Rückmeldungen benutze, kann ich erkennen, dass es nur den vertikalen Raum benötigt und nicht den gesamten verfügbaren Bereich!

Was könnte die Lösung dafür sein? Ich habe versucht, alle Einstellungen zu durchlaufen und sie manuell auf Breite und Höhe Auto, Horizontale und Vertikale Ausrichtung auf Stretch zu überschreiben, aber nichts scheint zu funktionieren wie erwartet!

Irgendein Code: (Shell.xaml)

%Vor%

(Ansicht, die die übergeordnete Höhe erben soll):

%Vor%

Also ist das eine Einschränkung in der Art und Weise, wie die Ansichten in das Haupt-XAML geladen werden, oder ist das eine Beschränkung von UserControl oder etwas anderes, was ich nicht verstehe?

Nur um zu klären; Ich sehe die Hintergrundfarbe von ItemsControl, die in Shell.xaml definiert ist und sowohl Horizontal als auch Vertikal dehnt, aber nicht den Hintergrund der in ItemsControl geladenen Ansicht.

Beachten Sie, dass ich einige der XAML entfernt habe, um den Punkt leichter verständlich zu machen!

Danke!

    
code-zoop 09.11.2009, 12:27
quelle

3 Antworten

8

Ich habe eine Lösung gefunden. Ich muss die ItemsPanel-Vorlage überschreiben, um ein Gitter (oder einen ähnlichen Container) zu verwenden:

%Vor%

Ich habe auch in diesem Fall etwas vom xaml entfernt, um es lesbarer zu machen!

Danke

    
code-zoop 09.11.2009, 13:05
quelle
10

Der Standardwert für ItemsControl.ItemsPanelTemplate ist StackPanel , der alle untergeordneten Elemente vertikal komprimiert und die beschriebenen Symptome angibt.

Der Lösungscode-zoop gab Änderungen an <Grid> . Dies funktioniert gut, solange es nur eine Ansicht in der Region gibt. Aber wenn die Region mehr als eine Aussicht hat, werden sie alle aufeinander und nicht nebeneinander gelegt.

Wenn Sie eine Region möchten, die mehrere Ansichten verarbeiten kann, aber die Ausdehnung von Ansichten auf die volle Größe der Region zulässt, verwenden Sie stattdessen DockPanel :

%Vor%

Dies bringt die erste Ansicht in ein Feld auf der linken Seite, das nächste daneben und so weiter bis zur letzten Ansicht, die den gesamten verbleibenden Platz ausfüllt.

Wenn Sie es vorziehen, wenn die Ansichten wie bei StackPanel vertikal gestapelt sind, müssen Sie dies in ItemContainerStyle einstellen:

%Vor%     
Ray Burns 09.11.2009 19:58
quelle
1

Haben Sie versucht, HorizontalContentAlignment und VerticalContentAlignment im ItemsControl auf Stretching zu setzen?

    
Will 09.11.2009 12:44
quelle

Tags und Links