指定的元素已经是另一个元素的逻辑子元素。首先断开它

时间:2012-01-26 22:46:26

标签: c# wpf

好的,我正在制作一个WPF菜单系统,问题如下:

我有一个MainWindow,它有一个触发转换到下一个UserControl的按钮:

private void Button_Click(object sender, RoutedEventArgs e)
{
    NewPage newPage = new NewPage();
    pageTransitionControl.ShowPage(newPage);
}

在这个UserControl(NewPage)上,它有一个后退按钮,它应该转换当前的UserControl,所以它会回到MainWindow。

private void Back_Click(object sender, RoutedEventArgs e)
{
    pageTransitionControl.SetCurrentPage(newPage);
    pageTransitionControl.UnloadPage();
}

问题在于SetCurrentPage(UserControl uc) - 它告诉我“指定的元素已经是另一个元素的逻辑子元素。首先断开它。” - 我不确定在这种情况下这意味着什么/如何解决这个问题?

void ShowNextPage()
{
    currentPage.Loaded += newPage_Loaded;
    contentPresenter.Content = currentPage;
}

public void UnloadPage()
{
    Storyboard hidePage = (Resources[string.Format("{0}Out", TransitionType.ToString())] as Storyboard).Clone();
    hidePage.Completed += hidePage_Completed;
    hidePage.Begin(contentPresenter);
}

void newPage_Loaded(object sender, RoutedEventArgs e)
{
    Storyboard showNewPage = Resources[string.Format("{0}In", TransitionType.ToString())] as Storyboard;
    showNewPage.Begin(contentPresenter);
}

void hidePage_Completed(object sender, EventArgs e)
{
    contentPresenter.Content = null;
}

public void SetCurrentPage(UserControl uc)
{
    contentPresenter.Content = uc;
}

1 个答案:

答案 0 :(得分:0)

Back_Click中,只需致电UnloadPage

ShowPage(newPage)已将newPage分配给Content的{​​{1}}属性,因此对contentPresenter的后续调用失败,因为该页面已经是主持人。