2012-01-26 105 views
0

好了,所以我在做一个WPF的菜单系统和问题如下:指定的元素已经是另一个元素的逻辑子元素。断开它首先

我有有一个按钮,触发到下一个用户控件转变的主窗口:

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(用户控件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

Back_Click只需调用UnloadPage

ShowPage(newPage)已经分配给newPagecontentPresenter的的Content属性,因此对SetCurrentPage后续调用失败的页面已经是演讲的孩子。

+0

如果我只是在NewPage上的Back_Click中调用UnloadPage(),它什么都不做。如果后退按钮位于MainWindow上,它会将其删除,但那不是我想要的......我不确定这是为什么。 – Michael 2012-01-26 23:05:09

相关问题