带有某种网格的ListBox布局
本文关键字:ListBox 布局 网格 | 更新日期: 2023-09-27 18:15:31
这些数据来自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
但是,变量的内容大小不同。所以这些信息并不是很有条理。所以我想要这样的东西:
| b g f e d c | | | | | | | j
| b g f e d c | | | | | | | j
其中|表示一列。我想在列表框中加入一个网格,但是我不知道怎么做
那么,为您的数据定制一个带有ItemTemplate
的ListBox呢?
这是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中添加一个额外的ColumnDefinition
和TextBlock
,并相应地设置Binding
。