【问题标题】:Specified element is already the logical child of another element. Disconnect it first指定元素已经是另一个元素的逻辑子元素。先断网
【发布时间】:2012-02-20 01:08:13
【问题描述】:

好的,我正在制作一个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;
}

【问题讨论】:

    标签: c# wpf


    【解决方案1】:

    Back_Click 中只需致电UnloadPage

    ShowPage(newPage) 已将newPage 分配给contentPresenterContent 属性,因此随后对SetCurrentPage 的调用失败,因为该页面已经是演示者的子页面。

    【讨论】:

    • 如果我只是在 Back_Click 的 NewPage 中调用 UnloadPage() - 它什么也不做。如果后退按钮在 MainWindow 上,它会删除它,但这不是我想要的……我不知道为什么会这样。
    猜你喜欢
    • 2012-08-23
    • 1970-01-01
    • 2023-04-05
    • 1970-01-01
    • 2012-11-17
    • 2011-04-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多