2016-11-28 1 views
0
<Grid x:Name="myMainGrid"> 
    <Button x:Name="button" Content="Button" HorizontalAlignment="Left" Margin="134,94,0,0" VerticalAlignment="Top" Width="75" Click="button_Click"/> 
</Grid> 

Anfügen hinzuzufügen. Keine Erstellung der Schaltfläche passiert, kein Append passiert. Sogar die statische Schaltfläche verschwand.Wie neue Schaltfläche Grid

Mein Ziel: Ändern des "Aussehens" des WPF durch Erstellen eines neuen Buttons. Ich weiß, dass ich mich nicht ändern würde, aber ich möchte neue Dinge ausprobieren.

Ich bin ein neuer Anfänger und ich verstehe nicht, was passiert ist ... Soll ich ein neues Gitter erstellen? Wo ist der Fehler?

+0

Edit: Fand meinen Fehler. Ich habe Breite und Höhe nicht eingegeben. : D –

+0

Vielleicht haben Sie den Fehler, den Sie * denken *, nicht gefunden, siehe meine Antwort. – BradleyDotNET

Antwort

1

Ihre neue Schaltfläche hat keine Eigenschaften und wurde in eine Grid eingegeben. Dies bedeutet, dass es füllen den gesamten Bereich gegeben (in diesem Fall, Ihr ganzes Fenster). Da es das letzte Kind sein wird, wird es den höchsten Z-Index haben und über der ursprünglichen Schaltfläche angezeigt.

Also im Grunde, Ihr ganzes Fenster wurde mit Ihrem neuen Knopf gefüllt.

Um es zu beheben, setzen Sie einfach die Width, Height und Margin Eigenschaften auf Ihre neue Schaltfläche, so dass es erscheinen kann, wo Sie wollen (und in der richtigen Größe). Alternativ können Sie auch StackPanel anstelle von Grid verwenden, um die Schaltflächen nebeneinander anzuordnen und die Schaltfläche so klein wie möglich zu machen (wegen fehlendem Inhalt ist sie möglicherweise aufgrund der Höhe 0 unsichtbar) füge einen Text hinzu wenn das so ist).

Als eine ziemlich wichtige Randnotiz sollten Sie den visuellen Baum auf diese Weise in WPF nicht manipulieren. Sie werden fast immer eine Datensammlung haben, an die Sie gebunden sind, und das Framework lässt diese Steuerelemente für Sie erstellen.

-1

Eine Sache, die ich in der Vergangenheit beim dynamischen Hinzufügen von Steuerelementen zu einem Grid getan habe, war die Verwendung der Grid.SetRow() - und Grid.SetColumn() -Methoden. Diese nehmen grundsätzlich Ihre Kontrolle und einen int als Parameter und setzen dieses Steuerelement auf die angegebene Zeile/Spalte. Zum Beispiel verwende ich das, um mehrere Canvas-Steuerelemente (195 von ihnen) zum Gitter hinzuzufügen und dann jedes in einer bestimmten Reihenfolge zu setzen.

int row = 2; 
int column = 0; 

for (int i = 0; i < 195; i++) 
{ 
    Canvas c = new Canvas(); 

    gridMain.Children.Add(c); 

    Grid.SetRow(c, row); 
    Grid.SetColumn(c, column); 

    if (column == 14) 
    { 
     column = 0; 
     row++; 
    } 
    else 
    { 
     column++; 
    } 
} 

Auch das im Auge behalten, wenn Sie nicht angeben, welche Spalten/Zeilen, die Sie Ihre Steuerelemente hinzufügen möchten, wird es nur halten sie auf die erste Zelle im Gitter addieren!

+0

Ich würde dringend empfehlen, mit 'ItemsControl' zu gehen; Sie können angehängte Eigenschaften verwenden, um Grid.Column/Row festzulegen. Das ist nur schmerzhaft. Außerdem hatte das OP keine Zeilen/Spalten eingerichtet – BradleyDotNET

Verwandte Themen