Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Silverlight 银光手风琴。如何收缩到数据绑定集合上的内容_Silverlight_C# 4.0_Silverlight Toolkit_Silverlight 5.0 - Fatal编程技术网

Silverlight 银光手风琴。如何收缩到数据绑定集合上的内容

Silverlight 银光手风琴。如何收缩到数据绑定集合上的内容,silverlight,c#-4.0,silverlight-toolkit,silverlight-5.0,Silverlight,C# 4.0,Silverlight Toolkit,Silverlight 5.0,我有手风琴,一定会收藏的。我需要应用变通方法,使Accordion根据内容调整其子项的大小(即,如果已从绑定集合中删除项目,我需要Accordion收缩,如果已添加,则需要Accordion展开) 但是,我发现的所有解决方法都使用AccordionItem对象。它们都在XAML中设置了AccordionItem项,因此它们的accordion.items是AccordionItem对象的集合 虽然我绑定到myObject,但它们被放置在ItemContainerStyleTemplate中的Ac

我有手风琴,一定会收藏的。我需要应用变通方法,使Accordion根据内容调整其子项的大小(即,如果已从绑定集合中删除项目,我需要Accordion收缩,如果已添加,则需要Accordion展开)

但是,我发现的所有解决方法都使用AccordionItem对象。它们都在XAML中设置了AccordionItem项,因此它们的accordion.items是AccordionItem对象的集合

虽然我绑定到myObject,但它们被放置在ItemContainerStyleTemplate中的AccordionItem对象中。我唯一需要的就是以某种方式访问那个手风琴项目。如果我尝试accordion.Items[0].GetType()之类的操作,它将返回myObject

所以问题是-如何从数据绑定的Accordion访问AccordionItem对象?

我想尝试的解决方法:(编辑:它可以根据我的需要工作)


我不得不做类似于手风琴的事情,而我能找到手风琴项目的唯一方法就是在视觉树上行走

我是这样做的:考虑到这些扩展方法:

public static IEnumerable<DependencyObject> GetAllChildrenOfType(this DependencyObject depObject, Type t, bool recursive = true)
{
    List<DependencyObject> objList = new List<DependencyObject>();

    var childrenList = depObject.GetChildren();

    foreach (DependencyObject i in childrenList)
    {
        Type ct = i.GetType();
        if (ct == t)
            objList.Add(i);

            if (recursive)
                objList.AddRange(i.GetAllChildrenOfType(t));
    }
    return objList.ToArray();
}

public static IEnumerable<DependencyObject> GetChildren(this DependencyObject depObject)
{
     int count = depObject.GetChildrenCount();
     for (int i = 0; i < count; i++)
     {
         yield return VisualTreeHelper.GetChild(depObject, i);
     }
}
这可能比需要的要复杂一点,在我的例子中,我在手风琴里放了一个手风琴,这使得事情最终变得很困难

public static IEnumerable<DependencyObject> GetAllChildrenOfType(this DependencyObject depObject, Type t, bool recursive = true)
{
    List<DependencyObject> objList = new List<DependencyObject>();

    var childrenList = depObject.GetChildren();

    foreach (DependencyObject i in childrenList)
    {
        Type ct = i.GetType();
        if (ct == t)
            objList.Add(i);

            if (recursive)
                objList.AddRange(i.GetAllChildrenOfType(t));
    }
    return objList.ToArray();
}

public static IEnumerable<DependencyObject> GetChildren(this DependencyObject depObject)
{
     int count = depObject.GetChildrenCount();
     for (int i = 0; i < count; i++)
     {
         yield return VisualTreeHelper.GetChild(depObject, i);
     }
}
var accordionItemList = myAccordion.GetAllChildrenOfType(typeof(AccordionItem));

foreach (AccordionItem i in accordionItemList)
{...}