Problem Hinzufügen von Leinwänden zu einem Stackpanel in Code in wpf
-
05-07-2019 - |
Frage
Ich habe genau das gleiche Problem wie angegeben (genommen Form hier , aber nicht beantwortet):
ich hinzufügen Kontrollen an den Stackpanel über StackPanel.Childrens.Add ().
Aber, was ich sehe - alle Steuerelemente hinzugefügt von mir, in der gleichen Position ist und einander überlappen. Sie haben nicht zu sein Layout innerhalb von Stackpanel.
Auch StackPanel.UpdateLayout () bringt ich nichts.
Ich für mich bin versucht Canvas
es hinzufügen (ja ich sie brauche) an die StackPanel
.
Irgendwelche Ideen?
Lösung
Haben Sie explizite Größen auf Leinwänden festgelegt? Leinwänden nicht Größe, ihre Inhalte zu passen, so dass, wenn Sie die Größe der Leinwand explizit angeben, wenn Sie sie alle in einem Stapel Panel setzen, deren Inhalt auf der jeweils anderen erscheinen, wie Sie erklären. Dies liegt daran, die (0,0) Position, auf die Leinwand Kinder relativ positioniert sind, wird die linke obere des Stackpanel (der gleiche Punkt für alle Leinwände und alle ihre Kinder) sein.
Versuchen Sie Folgendes in Kaxaml um die Situation zu markieren:
<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<StackPanel>
<Canvas>
<TextBlock Text="Child of canvas one" />
</Canvas>
<Canvas>
<TextBlock Text="Child of canvas two" />
</Canvas>
</StackPanel>
</Page>
Hier finden Sie die zwei Zeilen Text zu sehen sind oben auf einander überlagert.
Nun, versuchen Sie dies:
<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<StackPanel>
<Canvas Height="15">
<TextBlock Text="Child of canvas one" />
</Canvas>
<Canvas Height="15">
<TextBlock Text="Child of canvas two" />
</Canvas>
</StackPanel>
</Page>
Und Sie werden den Abstand sehen Sie sich wünschen.
Ich hoffe, das hilft.