Как динамически встроить пару XAML / Codebehind как дочерний элемент StackPanel? - PullRequest
0 голосов
/ 19 февраля 2009

У меня есть StackPanel с именем "MainContent".

Я могу динамически заполнить его такими элементами UIE, как:

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 (например, страница или окно):

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.ShowDialog (), конечно, но это внешнее по отношению к моему главному окну. Я хочу, чтобы окно Test1 было встроенным в моем приложении.

Как я могу это сделать?

Добавлено: Основной вопрос: как я могу заставить Window (или Page) действовать как UIElement, чтобы я мог динамически встраивать их в StackPanels и т. Д. * кто-нибудь сталкивался с этим?

Ответы [ 3 ]

1 голос
/ 19 февраля 2009

Самый простой способ - сохранить ваш XAML / код за наследованием от UserControl - и тогда все будет просто работать

1 голос
/ 19 февраля 2009

Я не знаю, возможно ли это. Но вместо того, чтобы заполнять панель окном, почему бы не заполнить ее корневым элементом окна. Вы получите все содержимое и значение окна без ненужного хрома.

Обновление: вы можете получить корневой элемент окна через свойство зависимости Content

    Window w;
    object rootElement = w.Content;
0 голосов
/ 19 февраля 2009

Вы пробовали это?

MainContent.Children.Add(window.Content);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...