如何将UI子项添加到空WPF页面?

时间:2015-11-20 15:48:50

标签: c# wpf user-interface wpf-controls

我有一个MainWindow,它是一个NavigationWindow。在这个MainWindow里面我想切换几个页面。其中一个页面必须由Code动态生成,而不是由XAML生成。当我之前有一个普通的窗口时,我可以像这样添加UI组件:

Button b = new Button();
b.Content = "Hello";
this.AddChild(b);

或者如果我首先使用此方法添加(例如)StackPanel,我可以将Child添加到此StackPanel:

myPanel.Children.Add(b);

但是, Page Class没有Children属性或AddChild方法。 到目前为止我找到的唯一方法是:

AddVisualChild(b);

页面显示但我没有看到我使用此方法添加的任何组件。 那么如何正确地将子项添加到WPF页面呢?

2 个答案:

答案 0 :(得分:2)

首先,Window.AddChild会在向其添加多个对象时抛出异常,因为WindowContentControlPage仅允许1个孩子。因此,您使用Page.Content属性设置孩子。因此,您希望向Page添加容器,然后将子容器添加到容器中 例如:

Button b = new Button();
b.Content = "Hello";
StackPanel myPanel = new StackPanel();
myPanel.Children.Add(b);
this.Content = myPanel;

答案 1 :(得分:2)

我不确定这是否适合您,但您可以尝试将页面内容设置为用户控件。例如。使用StackPanel并将所有子项添加到其中。之后,您将Page的内容设置为Stackpanel

这是MainWindow的构造函数中的一个惰性示例。

public MainWindow()
{
    InitializeComponent();

    StackPanel panel = new StackPanel();
    Button b1 = new Button {Content = "Hello"};
    Button b2 = new Button {Content = "Hi"};

    panel.Children.Add(b1);
    panel.Children.Add(b2);

    Page page = new Page {Content = panel};

    this.Content = page;
}