从UserControl在WPF窗口中动态更改内容

时间:2018-05-17 10:26:25

标签: c# wpf

我有两个UserControls,例如FirstUserControlSecondUserControl。首先,我使用帮助FirstUserControl在MainWindow中设置<ContentControl x:Name="contentControl" />

public MainWindow()
{
    InitializeComponent();
    this.contentControl.Content = new LoginControl();
}

但是,当用户按下按钮时,MainWindow中FirstUserControl ContentControl中的内容必须更改为SecondUserControl。但它并没有发生。 ContentControl仍然是FirstUserControl。可能是什么问题 - 我不知道。

此代码来自FirstUserControl:

private void loginButton_Click(object sender, RoutedEventArgs e)
{
    MainWindow mainWindow = new MainWindow(new CheckInCheckOutControl());
}

来自MainWindow的调查员,是否负责Shaning ContentControl:

public MainWindow(ContentControl contentControl)
{
    this.contentControl.Content = contentControl;
}

我还试图对MainWindow中的单独方法进行更改 - 但它没有帮助。

1 个答案:

答案 0 :(得分:2)

MainWindow mainWindow = new MainWindow(new CheckInCheckOutControl());创建一个MainWindow的新实例,而不是使用已经打开的MainWindow。不要这样做。

MainWindow拥有FirstUserControl和SecondUserControl,因此MainWindow应该更改它们,而不是FirstUserControl。

在FirstUserControl中创建一个事件

public event EventHandler LoginClick;

private void loginButton_Click(object sender, RoutedEventArgs e)
{
    if (LoginClick != null) LoginClick(this, e);
}
拥有FirstUserControl实例的MainWindow中的

订阅该事件并更改内容:

public MainWindow()
{
    InitializeComponent();
    var loginControl = new LoginControl();

    loginControl.LoginClick += (senser, e) =>
    {
         this.contentControl.Content = new CheckInCheckOutControl();
    }

    this.contentControl.Content = loginControl;
}
相关问题