2012-04-17 99 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