好的,我正在制作一个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;
}
答案 0 :(得分:0)
在Back_Click
中,只需致电UnloadPage
。
ShowPage(newPage)
已将newPage
分配给Content
的{{1}}属性,因此对contentPresenter
的后续调用失败,因为该页面已经是主持人。