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 Code

    Button 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?


  • Administrator

    Du solltest vielleicht definieren, was genau du verwendest. Es gibt mehrere Page Klassen. Mir ist zumindest eine Page 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 ein Content Property. Heisst man kann einer Page 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.


  • Administrator

    Mir fehlen immer noch Informationen. Man fügt schliesslich nicht einfach so einen Button in einer Grid dazu. Eine Grid definiert zuerst mal Reihen und Spalten und der Button wird dann einer Reihe und Spalte zugeordnet. Daher vielleicht auch die Frage, ob eine Grid hier wirklich das richtige ist?

    Ansonsten bleibt es immer noch gleich, wie ich es bereits gesagt hatte. Page hat ein Property Content . Dieses wird in diesem Fall vom Typ Grid 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 und ColumnDefinitions 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 eine Collection 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.


Anmelden zum Antworten