Переместить пользовательский элемент управления из главного окна в дочернее окно, а затем снова в главное окно?

#c# #wpf #window

#c# #wpf #окно

Вопрос:

У меня есть MainWindow, UserControl и дочернее окно. В MainWindow есть расширитель, содержимое которого задается как экземпляр UserControl, используя следующий код в MainWindowXaml.cs:

 public userControl 
userControl1 = new userControl();  
public MainWindow()  
{  
InitializeComponent();  
expander.Content = userControl1;  
}  
 

Затем я помещаю UserControl1 в дочернее окно при нажатии кнопки (кнопка присутствует в заголовке расширителя):

 private void b_click(...)  
{  
Window window = new Window();  
window.Content = userControl1;  
window.Closing  = childWindow_closing;
window.Show();  
expander.Visibility = Visibility.Collapsed;  
}  
 

Это работает.

Теперь я пытаюсь вернуть UserControl1 обратно в расширитель во время события закрытия дочернего окна:

 private void childWindow_closing(...)  
{  
expander.Visibility = Visibility.Visible;  
expander.Content = userControl1;  
}  
 

Но это не работает. Дочернее окно закрывается, и отображается расширитель. Но UserControl1 не отображается в расширителе. Есть какие-либо подсказки относительно того, почему?

Примечание: Весь вышеупомянутый код находится в файле MainWindowXaml.cs.

Комментарии:

1. В вашем childWindow_closing методе вы не устанавливаете MainWindow.Expander1.Content .

2. @WSC код находится в файле MainWindowXaml.cs.

3. В вашем MainWindow конструкторе, на который вы ссылаетесь Expander1 , но в childWindow_closing котором вы ссылаетесь expander . Это разные вещи.

4. @WSC извините, на самом деле это должен быть расширитель, а не Расширитель1. Я исправлю вопрос.

5. Попробуйте установить expander.Content = null , когда вы хотите переместить его в дочернее окно.

Ответ №1:

Как @WSC предлагает установить расширитель.Content = null; устраняет проблему.