it-swarm.com.de

Fügen Sie zur Laufzeit WPF-Steuerelemente hinzu

Ich habe ein WPF-UserControl geschrieben und möchte zur Laufzeit ein oder mehrere davon meinem Fenster hinzufügen, wenn ich auf eine Schaltfläche klicke. Wie kann ich das machen?

Edit: Weitere Spezifikation Ich möchte die Usercontrols zu einem Canvas hinzufügen und in eine absolute Position bringen. Die Leinwand ist eine Zeichnung der Böden in meinem Haus, und jede Benutzersteuerung verfügt über Eigenschaften, die angeben, wo sie sich im Haus befinden. Ich möchte, dass alle Steuerelemente an der richtigen Position auf der Leinwand positioniert werden.

Ich denke so etwas

var light = new LightUserControl(2);
HouseCanvas.Children.Add(light); // this should be positioned in a specific place
28
Frode Lillerud

Nachdem Sie Ihr Steuerelement zum Canvas hinzugefügt haben, müssen Sie die oberen und linken Koordinaten mithilfe der angefügten Eigenschaften Canvas.Top und Canvas.Left wie folgt angeben.

var light = new LightUserControl(2);
HouseCanvas.Children.Add(light);
Canvas.SetLeft(light, 20);
Canvas.SetTop(light, 20);
39
Ian Oakes

Wenn Sie das Steuerelement einem Grid anstelle eines Canvas hinzufügen möchten, können Sie alle Grid-Eigenschaften über die statische Grid-Klasse folgendermaßen angeben:

Label newLabel = new Label();
label.Content = "New Element";
Main.Children.Add(newLabel);
Grid.SetColumn(newLabel, 0);
Grid.SetRow(newLabel, 0);
12

Fügen Sie dem Fenster ein StackPanel hinzu und klicken Sie auf jede Schaltfläche.

 _stackPanel.Children.Add(new YourControl());  

Sie können dies auf viele Arten tun.

2
Jobi Joy

Meine Lösung:

for (i = 1; i <= buttoncount; i++)
{
    Button mybutton = new Button();
    Grid1.Children.Add(mybutton);
    mybutton.Height = 100;
    mybutton.Width = 100;
    mybutton.Name = "button" + i;
    mybutton.Content = mybutton.Name;
}
2
Dhruv Singhal

Einfach die Antwort ergänzen:

for (i = 1; i <= buttoncount; i++)
{
    Button mybutton = new Button();
    Grid1.Children.Add(mybutton);
    mybutton.Height = 100;
    mybutton.Width = 100;
    mybutton.Name = "button" + i;
    mybutton.Content = mybutton.Name;
    mybutton.Click += button_Click;
}

private void button_Click(object sender, RoutedEventArgs e)
{
    // do something
}
0
Cassius
    public static void AddChild(this Visual parent, UIElement child)
    {
        if (InternalAddChild(parent, child))
        {
            return;
        }
        throw new NotSupportedException();
    }
    private static bool InternalAddChild(Visual parent, UIElement child)
    {
        Panel panel = parent as Panel;
        if (panel != null)
        {
            panel.Children.Add(child);
            return true;
        }
        for (int i = VisualTreeHelper.GetChildrenCount(parent) - 1; i != -1; i--)
        {
            Visual target = VisualTreeHelper.GetChild(parent, i) as Visual;
            if (target != null && InternalAddChild(target, child))
            {
                return true;
            }
        }
        return false;
    }
0
dexiang