2012-04-17 105 views
3

有没有办法根据它的一些子元素来订购堆栈面板?基于子元素对堆栈面板进行排序?

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

所以我想知道是否可以通过一个stackpanels子元素排序,即textblock1.Text包含DateTime属性?

 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); 
     } 
    } 

回答

2

显示的顺序完全被调用的顺序定义为

MainArea1.Children.Add(stackPanel); 

所以,你可以试试

foreach (var node in xDoc.Descendants("Student").OrderBy(e => ...)) 
{ 
    .... 
} 

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

+0

谢谢亨克做的伎俩! – 2012-04-17 11:36:47