Integrieren eines Buttons in ein Page Objekt
-
Hallo,
mein Problem ist folgendes:
ich will per c# code (in der code behind datei des Page Elements) einen Button in ein Page Objekt integrieren, dass in einem NavigationWindow steckt.
Kann mir jemand sagen, wie das geht?
Mit dem CodeButton button1 = new Button(); AddVisualChild(button1);
komme ich nicht weiter.
-
Das sollte einfach mit
page.Controls.Add(button);
gehen.
-
Ich nehme an das du mit page das page Objekt meinst. Dort finde ich nur die Klasse Control und in dieser gibt es keine Add Methode.
Muss ich vorher noch etwas anderes tun, oder wieso funktioniert es nicht?
-
Du solltest vielleicht definieren, was genau du verwendest. Es gibt mehrere
Page
Klassen. Mir ist zumindest einePage
Klasse unter ASP.Net und WPF bekannt.Da es anscheinend nicht ASP.Net ist, wie dies DarkShadow44 vermutet hat, vermute ich jetzt einfach mal, dass es WPF ist.
In WPF hat
Page
einfach nur einContent
Property. Heisst man kann einerPage
nur ein einziges Kindelement hinzufügen. Das ist meistens dann irgendein Panel (z.B.Grid
). Du musst also dieses Panel holen und dort deine Buttons hinzufügen, natürlich mit den korrekten Attached Properties gesetzt, falls diese benötigt werden.Genauer will ich gar nicht werden, solange du nicht gesagt hast, ob es sich nun wirklich um WPF handelt und was für ein Panel du einsetzt. Also wie sieht die Grundstruktur der Page in XAML aus? Was soll das Ziel (ebenfalls in XAML) sein?
Grüssli
-
Ja, ich meine die Page Klasse aus WPF. Die Grundstruktur sieht wie folgt aus:
<Page x:Class="WpfApplication9.Page1" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" mc:Ignorable="d" d:DesignHeight="300" d:DesignWidth="300" Title="Page1"> <Grid> </Grid> </Page>
Das Grid Element würde ich dann weiterhin als Panel benutzen, oder in C# ein neues definieren, falls das notwendig ist.
Mein Ziel ist es eine bestimmte Anzahl von Buttons in dieses Grid Element zu integrieren. Die Anzahl der Buttons ist jedoch variabel, deshalb kann ich es nicht direkt in xaml programmieren, sondern muss es über C# hinbekommen.
-
Mir fehlen immer noch Informationen. Man fügt schliesslich nicht einfach so einen
Button
in einerGrid
dazu. EineGrid
definiert zuerst mal Reihen und Spalten und derButton
wird dann einer Reihe und Spalte zugeordnet. Daher vielleicht auch die Frage, ob eineGrid
hier wirklich das richtige ist?Ansonsten bleibt es immer noch gleich, wie ich es bereits gesagt hatte.
Page
hat ein PropertyContent
. Dieses wird in diesem Fall vom TypGrid
sein, was du aber logischerweise vorher noch casten musst.var grid = (Grid)page.Content; Grid.SetRow(button, 0); Grid.SetColumn(button, 0); grid.Children.Add(button);
Allenfalls musst du halt noch die
RowDefinitions
undColumnDefinitions
der Grid anpassen.Edit: Das ist aber ziemlich unschön, muss ich einfach noch anmerken. Bist du sicher, dass du nicht lieber ein
ItemsControl
oder eine Subklasse davon verwenden möchtest? Dann könntest du direkt eineCollection
anbinden und könntest das alles per MVVM lösen und musst nicht mit Code rumfrickeln.Grüssli
-
Danke, jetzt funktionierts.
Um auf deine Fragen zu antworten:
Ich möchte mehrere Buttons in Reihen und Spalten anordnen, deshalb denke ich, dass das grid element das richtige ist.
Kann ich per ItemControl auch eine unbestimmte Anzahl von Buttons gitterförimig anordnen? Mir schien es auf der Seite von msdn nicht so.
-
Schau dir mal das UniformGrid an, vielleicht leistet es das gewünschte.