2012-04-17 8 views
3

いくつかの子要素に基づいてスタックパネルを注文する方法はありますか?子要素に基づいてスタックパネルを並べ替えますか?

groupboxとtextblockのような一般的なものをスタックパネルに追加すると、textblocks情報の1つが私の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); 
     } 
    } 

答えて

2

表示の順序は完全にそう

MainArea1.Children.Add(stackPanel); 

への呼び出しの順序によって定義され、

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

のようなものを試してみてください(そして、あなたは本当にここTemlatesを使用する必要があります)

+0

ありがとうHenkがトリックをしました! –

関連する問題