【问题标题】:UserControl throwing: Element is already the child of another elementUserControl 抛出:元素已经是另一个元素的子元素
【发布时间】:2017-06-02 14:26:05
【问题描述】:

我正在开发一个需要手风琴的 UWP 应用程序。由于 UWP 工具包不提供手风琴控件,因此我创建了自己的 Accordion 控件。它就像一个魅力。

问题是,当我创建用户控件的多个实例时,它会引发异常。我在以下链接上分享了一个精简的示例:

https://1drv.ms/u/s!AiCx3o82H3zNu1DrZxtQ_sTYYf-D

【问题讨论】:

  • 是的......我认为这是每个人在发布任何问题之前都会遵循的第一件事
  • 错误信息很清楚,答案也很清楚 - '控件只能有一个父级'。您当前形式的问题似乎是重复的。请尝试缩小问题范围,编辑问题 - 如果您将一些代码用于定义控件以及何时出现错误,那就更好了。
  • 如果您有时间,请查看提供的相同内容。我尝试了所有可能的解决方法,但没有找到任何解决方案

标签: uwp


【解决方案1】:

我不完全确定问题出在哪里。 (我认为这与具有默认为对象的静态支持属性有关,然后包含在每个控件中但无法证明它。)

但是,有一个简单的解决方法。
而不是使用您的MydesqAccordionUserControl.xaml,它基本上是包装然后尝试重新实现ItemsControl,您可以从它继承。
从您的项目中删除 MydesqAccordionUserControl.xamlMydesqAccordionUserControl.xaml.cs 并将它们替换为包含以下代码的类。问题已排序。

using Windows.UI.Xaml.Controls;

namespace MydesqAccordionUserControl
{
    public class MydesqAccordionControl : ItemsControl
    {
        public void CollapseOtherItems(MydesqAccordionItem item)
        {
            if (Items != null)
            {
                foreach (var mydesqAccordionItem in Items)
                {
                    if (!mydesqAccordionItem.Equals(item))
                    {
                        (mydesqAccordionItem as MydesqAccordionItem)?.CollapseContent();
                    }
                }
            }
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多