Подтвердить что ты не робот

Доступ к родительскому окну из User Control

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

userControl1 uc1 = new userControl1();

mainGrid.Children.Add(uc1);

через этот код я загружаю userControl1 в основную сетку.

Но когда я нажимаю кнопку внутри userControl1, то я хочу загрузить еще один userControl2 в mainGrid, который находится в главном окне?

4b9b3361

Ответ 1

Вы пробовали

Window yourParentWindow = Window.GetWindow(userControl1);

Ответ 2

Это получает окно корневого уровня:

Window parentWindow = Application.Current.MainWindow

или прямое родительское окно

Window parentWindow = Window.GetWindow(this);

Ответ 3

Спасибо, что помогли мне, ребята. я получил другое решение

 ((this.Parent) as Window).Content = new userControl2();

это отлично работает

Ответ 4

Сделайте статический экземпляр главного окна, вы можете просто вызвать его в своем пользовательском элементе управления:

См. этот пример:

Window1.cs

 public partial class Window1 : Window
    {
        public Window1()
        {
            InitializeComponent();
            _Window1 = this;
        }
        public static Window1 _Window1 = new Window1();

    }

UserControl1.CS

public partial class UserControl1 : UserControl
    {
        public UserControl1()
        {
            InitializeComponent();

        }
        private void AddControl()
        {
           Window1._Window1.MainGrid.Children.Add(usercontrol2)
        }
    }

Ответ 5

Единственная причина, по которой предложенный

Window yourParentWindow = Window.GetWindow(userControl1);

не работает для вас, потому что вы не применили его к правильному типу:

var win = Window.GetWindow(this) as MyCustomWindowType;

if (win != null) {
    win.DoMyCustomWhatEver()
} else {
    ReportError("Tough luck, this control works only in descendants of MyCustomWindowType");
}

Если не должно быть, тем больше связей между вашим типом окон и вашим контролем, я считаю ваш подход плохим дизайном.

Я бы предложил передать сетку, на которой элемент управления будет работать как параметр конструктора, сделать его в свойство или искать нужную (root?) сетку внутри любого Window динамически.