在WPF / C中的UserControl中将子窗口添加到父窗口中的StackPanel#

时间:2014-02-21 15:51:19

标签: c# wpf xaml user-controls

我有一个MainWindow,在这个MainWindow里面我加载了一个UserControl。 MainWindow包含StackPanel。现在我想从UserControl向该StackPanel添加一个按钮。

如果我直接添加它,它可以(来自MainWindow) - 但不是来自UserControl。

示例:

MainWindow.xaml.cs

    public MainWindow()
    {
        InitializeComponent();

        var myTestRadioButton = new RadioButton
        {
            Name = "TestRadioButton",
            Height = 31.5,
            Width = 140,
        };

        MyStackPanel.Children.Add(myTestRadioButton);
    }

作品

UserControl1.xaml.cs

    public UserControl1()
    {
        InitializeComponent();

        var parentWindow = new MainWindow();

        var myTestRadioButton = new RadioButton
        {
            Name = "TestRadioButton",
            Height = 31.5,
            Width = 140,
        };

        parentWindow.MyStackPanel.Children.Add(myTestRadioButton);
     }

不起作用。

我尝试创建父窗口的静态实例...

有趣的是 - >我没有得到任何错误消息或类似的东西......它只是不起作用(例如按钮没有显示......)

请帮助:) :) :))

2 个答案:

答案 0 :(得分:0)

执行此操作var parentWindow = new MainWindow();您在用户控件中创建new window而不是对当前MainWindow的引用

public UserControl1()
        {
            InitializeComponent();

            var parentWindow = new MainWindow();

            var myTestRadioButton = new RadioButton
            {
                Name = "TestRadioButton",
                Height = 31.5,
                Width = 140,
            };
         //just add something like this  
        public  void AddChildControl(Window MyWindow)
       {
              MyWindow.MyStackPanel.Children.Add(myTestRadioButton);
       }

     }

从用户控件更改MainWindow

public MainWindow()
    {
        InitializeComponent();

        var myTestRadioButton = new RadioButton
        {
            Name = "TestRadioButton",
            Height = 31.5,
            Width = 140,
        };

            var usercontrol1= new    UserControl1() ; 
             usercontrol.AddChildControl(this);

    }

答案 1 :(得分:0)

你创建了一个窗口的新实例。 (答案是K B)这无论如何都无法发挥作用

如果您真的(无论如何)需要动态GUI,您应该使用另一种方法:

你可能想在你的usercontrol中有一个stackpanel

<Stackpanel x:Name="myStack"/>

代码隐藏:

Usercontrol()
{
myStack.Children.Add(new WhateverControl());
}