我有一个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页面呢?
答案 0 :(得分:2)
首先,Window.AddChild
会在向其添加多个对象时抛出异常,因为Window
是ContentControl
。 Page
仅允许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;
}