Problema durante l'aggiunta di tele a uno stackpanel nel codice in wpf
-
05-07-2019 - |
Domanda
Ho lo stesso identico problema tra quelli citati (preso in forma qui , ma senza risposta):
Aggiungo i controlli a StackPanel tramite StackPanel.Childrens.Add ().
Ma quello che vedo - tutti i controlli, aggiunti da parte mia, sono nella stessa posizione e si sovrappongono. Non lo sono layout all'interno di StackPanel.
Anche StackPanel.UpdateLayout () porta niente di me.
Io per me sto cercando di aggiungere Canvas
es (sì, ne ho bisogno) a StackPanel
.
Qualche idea?
Soluzione
Hai impostato dimensioni esplicite sulle tue tele? Le tele non si adattano al loro contenuto, quindi a meno che tu non specifichi esplicitamente la dimensione della tela, quando le metti tutte in un pannello di pila, il loro contenuto apparirà uno sopra l'altro, come spieghi. Questo perché la posizione (0,0) rispetto alla quale sono posizionati i figli della tela sarà la parte superiore sinistra del pannello di stack (lo stesso punto per tutte le tele e tutti i loro figli).
Prova quanto segue in Kaxaml per evidenziare la situazione:
<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>
Vedrai che le due righe di testo sono sovrapposte l'una sull'altra.
Ora, prova questo:
<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>
E vedrai la spaziatura che desideri.
Spero che sia d'aiuto.