如何动态嵌入XAML / Codebehind对作为StackPanel的子代?

时间:2009-02-19 13:34:22

标签: wpf

我有一个名为“MainContent”的StackPanel。

我可以用这样的UIElements动态填充它:

TextBlock textBlock = new TextBlock();
textBlock.Text = String.Format("This is text");
textBlock.Background = new SolidColorBrush(Colors.Beige);
MainContent.Children.Add(textBlock);

Button button = new Button();
button.Content = "This is a button";
MainContent.Children.Add(button);

但是我想超越它并用XAML / Codebehind对(例如Page或Window)填充它:

Type type = this.GetType();
Assembly assembly = type.Assembly;
Window window = (Window)assembly.CreateInstance(String.Format("{0}.{1}", type.Namespace, "Test1"));
MainContent.Children.Add(window);  

但是上面的代码抱怨我无法添加“Window to a Visual”。我当然可以做window.ShowDialog()然后它在我的主窗口的外部。 我希望Test1窗口在我的应用程序中嵌入

我该怎么做?

已添加:主要问题是:如何让Window(或Page)充当UIElement,以便我可以在StackPanels等中动态嵌入它们。目前正在查看 XamlLoader < / strong>,有经验的人吗?

3 个答案:

答案 0 :(得分:1)

我不知道是否可能。但是,为什么不用窗口的根元素填充窗口,而不是用窗口填充面板。您将获得窗口的所有内容和值,而不需要不必要的镶边。

更新:您可以通过依赖属性Content

获取窗口的根元素
    Window w;
    object rootElement = w.Content;

答案 1 :(得分:1)

最简单的方法是让你的XAML /代码从UserControl继承 - 然后一切都会正常工作

答案 2 :(得分:0)

你试过这个吗?

MainContent.Children.Add(window.Content);