以某种电网

以某种电网

问题描述:

的ListBox的布局我有这个数据从XML来:以某种电网

var searched = from c in xml.Descendants("tbody").Descendants("tr") 
     let team = c.Element("td").ElementsAfterSelf("td") 
     select new Time 
      { 
       a = c.Element("td").ElementsAfterSelf("td").First().Value, 
       b = Int32.Parse(c.Descendants("td").ElementAt(3).Value), 
       c = Int32.Parse(c.Descendants("td").ElementAt(4).Value), 
       d = Int32.Parse(c.Descendants("td").ElementAt(5).Value), 
       e = Int32.Parse(c.Descendants("td").ElementAt(6).Value), 
       f = Int32.Parse(c.Descendants("td").ElementAt(7).Value), 
       g = Int32.Parse(c.Descendants("td").ElementAt(8).Value), 
       h = Int32.Parse(c.Descendants("td").ElementAt(9).Value), 
       i = Int32.Parse(c.Descendants("td").ElementAt(10).Value), 
       j = float.Parse(c.Descendants("td").ElementAt(11).Value) 
      }; 

这样做了,我在一家ListBox显示它们:

foreach (var item in searched) 
    { 
     listBox1.Items.Add(item.a + " " + item.b + " " + item.c + " " + 
      item.d + " " + item.e + " " + item.f + " " + item.g + " " + 
      item.h + " " + item.i + " " + item.j); 
     listBox1.Items.Add(" "); 
    } 

它打印精细,这是我是如何需要它的。 现在我需要格式化它。现在 ,它在打印这样的:

a  b c d e f g h j 


然而,该变量的内容在大小不同。所以信息没有得到很好的组织。 所以我想是这样的:

A | B | C | d |é| F | G | H |百灵
A | B | C | d |é| F | G | H |百灵

其中|代表一列。我正在考虑一个列表框中的网格,但后来我迷失在如何去做。

那么,如何根据您的数据量身定制一个带有ItemTemplate的列表框?

这是ListBox

<ListBox HorizontalAlignment="Left" Margin="12,6,0,0" Name="listBox1" VerticalAlignment="Top"> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <Grid> 
       <Grid.ColumnDefinitions> 
        <ColumnDefinition Width="150" /> 
        <ColumnDefinition Width="150" /> 
        <ColumnDefinition Width="150" /> 
       </Grid.ColumnDefinitions> 
       <TextBlock Grid.Column="0" Text="{Binding a}" Margin="0,0,12,0" /> 
       <TextBlock Grid.Column="1" Text="{Binding b}" Margin="0,0,12,0" /> 
       <TextBlock Grid.Column="2" Text="{Binding c}" Margin="0,0,12,0" /> 
      </Grid> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

它使用一个网格的每个项目,把值在单独的列。您可以尝试使用列大小。

这表明绑定:

private void button1_Click(object sender, RoutedEventArgs e) 
{ 
    List<MyObject> list = new List<MyObject>(); 
    list.Add(new MyObject() { a = 1, b = 2, c = 3 }); 
    list.Add(new MyObject() { a = 4, b = 57346, c = 6 }); 
    list.Add(new MyObject() { a = 7, b = 8, c = 9 }); 

    listBox1.ItemsSource = list; 
} 

我刚刚创建编造数据的列表,并将其设置为列表框中的ItemsSource。在你的情况下,数据将来自XML。

而且我用这个模拟类来进行测试:

public class MyObject 
{ 
    public int a { get; set; } 
    public int b { get; set; } 
    public int c { get; set; } 
} 

它只有用于演示它是如何工作的3场。您也可以轻松添加其他字段。对于每个附加字段,在XAML中添加一个额外的ColumnDefinitionTextBlock,并相应地设置Binding

+0

完美!我真的在想一个列表框中的网格,但我错过了 ... 现在,你的数据现在是一个更有组织的很多! 有一件事......每当我想添加一列时,里面的是必需的吗? –

+0

是的,每个给出一个列,然后可以通过'Grid.Column =“x”'引用这个列来将控件放在那里。 –

+0

我明白了! Thx男人! –