Подтвердить что ты не робот

Добавить элемент управления WPF во время выполнения

Я написал WPF UserControl и хочу добавить одно или несколько из них в мое окно во время выполнения, когда я нажимаю кнопку. Как я могу это сделать?

Изменить: Дополнительная спецификация Я хочу добавить usercontrols в Canvas и установить абсолютную позицию. Холст представляет собой рисунок полов в моем доме, и каждый пользовательский элемент управления имеет свойства, указывающие, где находится его дом. Поэтому я хочу, чтобы все элементы управления располагались в правильном положении на холсте.

Я думаю что-то вроде этого

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

Ответ 1

После добавления элемента управления в Canvas вам нужно указать верхнюю и левую координаты, используя прикрепленные свойства Canvas.Top и Canvas.Left следующим образом.

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

Ответ 2

Если вы хотите добавить элемент управления в Grid вместо Canvas, вы можете указать все свойства Grid через статический класс Grid следующим образом:

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

Ответ 3

Добавьте StackPanel в окно и на каждом нажатии кнопки

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

Вы можете сделать это разными способами.

Ответ 4

Мое решение:

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;
}

Ответ 5

    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;
    }

Ответ 6

Просто дополняя ответ:

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
}