2016-04-14 11 views
1

Ich füge dynamisch Textfelder hinzu, die auf einem Klick in das Stackpanel basieren. Die Textfelder sind jedoch in der Benutzeroberfläche nicht sichtbar. Hier ist der Code zum Erstellen von Textboxen im Stackpanel.Dynamisch hinzugefügte Steuerelemente im Stackpanel sind in WPF nicht sichtbar. C#

public void GenerateControls() 
{ 
    TextBox txtNumber = new TextBox(); 
    txtNumber.Name = "txtNumber"; 
    txtNumber.Text = "1776"; 
    txtNumber.Background= Brushes.Red; 
    panel1.Children.Add(txtNumber); 
} 

warum seine nicht sichtbar .. ?? und hier ist der XAML-Teil von Stackpanel

<StackPanel Name="panel1" Grid.Column="1" HorizontalAlignment="Left" Height="151" Margin="427,60,0,0" Grid.Row="2" VerticalAlignment="Top" Width="216"> 
    <StackPanel Height="144"> 

    </StackPanel> 
</StackPanel> 
+1

Bitte drücken Sie Ihren XAML-Code. Ich denke, vielleicht ist das Problem die Höhe Ihres Panels1. Oder Ihr Panel1 wird möglicherweise von anderen Steuerelementen abgedeckt. –

+1

Ihr Code ist korrekt, da muss das Problem woanders liegen. – bitbonk

+0

Aktualisierte den XAML-Code – Arshad

Antwort

1

Wenn Sie Kontrollen werden werden dynamisch hinzufügen, beschränken nicht die Höhe (oder sogar Breite) des Containers, dem Sie hinzufügen.

Aktualisieren Sie Ihren XAML mit automatischer Höhe/Breite.

<StackPanel Name="panel1" 
      Grid.Column="1" 
      Height="Auto" 
      Width="Auto" 
      Margin="427,60,0,0" 
      Grid.Row="2" 
      VerticalAlignment="Top" 
      HorizontalAlignment="Left" > 
    <StackPanel Height="144"> 

    </StackPanel> 
</StackPanel> 

Auch, wenn Sie ein neues Kind hinzufügen, stellen Sie sicher, dass Sie das StackPanel Layout aktualisieren.

public void GenerateControls() 
{ 
    TextBox txtNumber = new TextBox(); 
    txtNumber.Name = "txtNumber"; 
    txtNumber.Text = "1776"; 
    txtNumber.Background= Brushes.Red; 

    panel1.Children.Add(txtNumber); 
    panel1.UpdateLayout(); 
} 
1

In Ihrem XAML-Code gibt es ein Stackpanel in Ihrem 'Panel', es wird das erste Kind von 'Panel' sein.

Und seine Höhe ist 144px. Ihr "Panel1" ist 151 px.

Also, wenn Sie Textfelder in "Panel" hinzufügen, werden sie hinter dem 144px Stackpanel angezeigt.

Es gibt nur 7px, um sie anzuzeigen. Sie werden also nicht auf Ihrem Fenster angezeigt.