基于子元素排序stackpanel?

时间:2012-04-17 10:17:30

标签: c# wpf linq

有没有办法根据某些子元素订购stackpanel?

在后面的代码中,我将一些通用的东西,比如groupbox和textblock添加到stackpanel,其中一个textblocks信息是来自我的webservice的DateTime,我尝试使用linq按降序排序,但输出仍然相同。

所以我想知道是否可以通过其中一个stackpanels子元素(即包含DateTime属性的textblock1.Text)进行排序?

        XDocument xDoc = XDocument.Load(uriGroups);
        var sortedXdoc = xDoc.Descendants("Student")
                       .OrderByDescending(x => Convert.ToDateTime(x.Element("TimeAdded").Value));


        foreach (var node in xDoc.Descendants("Student"))
        {

            GroupBox groupbox = new GroupBox();
            groupbox.Header = String.Format(node.Element("StudentID").Value);
            groupbox.Width = 100;
            groupbox.Height = 100;
            groupbox.Margin = new Thickness(1);

            TextBlock textBlock = new TextBlock();
            textBlock.Text = String.Format(node.Element("FirstName").Value + " " + (node.Element("LastName").Value));
            textBlock.TextAlignment = TextAlignment.Center;

            TextBlock textBlock1 = new TextBlock();
            textBlock1.Text = (DateTime.Parse(node.Element("TimeAdded").Value)).ToString("d");
            String.Format("{0:d/M/yyyy}", DateTime.Parse(node.Element("TimeAdded").Value));
            textBlock1.TextAlignment = TextAlignment.Center;
            textBlock1.VerticalAlignment = VerticalAlignment.Bottom;

            StackPanel stackPanel = new StackPanel();
            stackPanel.Children.Add(groupbox);

            stackPanel.Children.Add(textBlock);
            stackPanel.Children.Add(textBlock1);
            stackPanel.Margin = new Thickness(5);
            stackPanel.MouseEnter += new MouseEventHandler(stackpanel_MouseEnter);
            stackPanel.MouseLeave += new MouseEventHandler(stackpanel_MouseLeave);
            MainArea1.Children.Add(stackPanel);
        }
    }

1 个答案:

答案 0 :(得分:2)

显示顺序完全由调用

的顺序定义
MainArea1.Children.Add(stackPanel);

所以,试试像

这样的东西
 foreach (var node in xDoc.Descendants("Student").OrderBy(e => ...))
 {
    ....
 }

(你真的应该在这里使用Temlates)