如何将 UI 个子项添加到空 WPF 页面?
How do I add UI Children to an empty WPF-Page?
我有一个 MainWindow,它是一个 NavigationWindow。在这个 MainWindow 中,我想切换几个页面。其中一个页面必须由代码动态生成,而不是 XAML。当我之前有一个正常的 window 时,我可以像这样添加 UI 个组件:
Button b = new Button();
b.Content = "Hello";
this.AddChild(b);
或者,如果我首先使用此方法添加(例如)StackPanel,我可以使用以下方法将子级添加到此 StackPanel:
myPanel.Children.Add(b);
但是,页面 Class 没有子属性或 AddChild 方法。
目前我找到的唯一方法是:
AddVisualChild(b);
页面显示了,但我没有看到我用这种方法添加的任何组件。
那么如何正确地将 Children 添加到 WPF 页面?
首先,Window.AddChild
在添加多个object时会抛出异常,因为Window
是一个ContentControl
。 Page
只允许 1 个 child。因此您使用 Page.Content
属性 设置 child。所以你想在你的 Page
中添加一个容器,然后将 children 添加到容器中。
例如:
Button b = new Button();
b.Content = "Hello";
StackPanel myPanel = new StackPanel();
myPanel.Children.Add(b);
this.Content = myPanel;
我不确定这是否适合您,但您可以尝试将页面内容设置为用户控件。例如。使用 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;
}
我有一个 MainWindow,它是一个 NavigationWindow。在这个 MainWindow 中,我想切换几个页面。其中一个页面必须由代码动态生成,而不是 XAML。当我之前有一个正常的 window 时,我可以像这样添加 UI 个组件:
Button b = new Button();
b.Content = "Hello";
this.AddChild(b);
或者,如果我首先使用此方法添加(例如)StackPanel,我可以使用以下方法将子级添加到此 StackPanel:
myPanel.Children.Add(b);
但是,页面 Class 没有子属性或 AddChild 方法。 目前我找到的唯一方法是:
AddVisualChild(b);
页面显示了,但我没有看到我用这种方法添加的任何组件。 那么如何正确地将 Children 添加到 WPF 页面?
首先,Window.AddChild
在添加多个object时会抛出异常,因为Window
是一个ContentControl
。 Page
只允许 1 个 child。因此您使用 Page.Content
属性 设置 child。所以你想在你的 Page
中添加一个容器,然后将 children 添加到容器中。
例如:
Button b = new Button();
b.Content = "Hello";
StackPanel myPanel = new StackPanel();
myPanel.Children.Add(b);
this.Content = myPanel;
我不确定这是否适合您,但您可以尝试将页面内容设置为用户控件。例如。使用 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;
}