我在Silverlight中有一个ItemsControl来显示对象列表。这些对象包含字符串Name,Value和Unit,例如“Load”,“100”和“MW”。控件位于网格列内,网格列的大小可能会根据浏览器窗口的大小而变化。我正在尝试格式化DataTemplate以允许Name字符串在左侧,Value和Unit在右侧。例如...
|Load 100 MW |
|Load2 50 MW |
|Unit1 20 X |
|Unit2 130 YXZ|
经过大量的试验和错误后,我设法通过使用两列网格来实现这一点。左侧包含名称,右侧包含包含值和单位的堆栈面板。这似乎有效,但如果有任何长度不同的单位,则文本的对齐方式不起作用。例如...
|Load 100 MW|
|Load2 50 MW|
|Unit1 20 X|
|Unit2 130 YXZ|
我已经没有关于如何格式化的想法了。谁能提出任何建议?重点是我事先并不知道名称,值或单位字符串的长度,当主列更改大小时,名称必须保留在左侧,值和单位在右侧。
提前致谢,Cap
(这是迄今为止的代码)
<ItemsControl Name="DataTypesGrid" ItemsSource="{Binding}" Margin="0,8,0,0" BorderBrush="{x:Null}" Foreground="White" Background="{x:Null}" IsEnabled="True">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Vertical" Margin="0,2,0,0" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid Width="Auto">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"></ColumnDefinition>
<ColumnDefinition Width="*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<TextBlock Text="{Binding Name}" HorizontalAlignment="Left" Grid.Column="0"/>
<StackPanel Grid.Column="1" Orientation="Horizontal" HorizontalAlignment="Right">
<TextBlock Text="{Binding Value}" HorizontalAlignment="Right" Margin="0,0,4,0"/>
<TextBlock Text="{Binding Unit}" HorizontalAlignment="Right"/>
</StackPanel>
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
答案 0 :(得分:2)
目前,您基本上每个新行重新开始,根据单个数据条目计算网格列宽度。
问题是你想要跨越行的宽度行为“就像数据网格列”。听起来你实际上想要自定义数据网格并删除你不想要的任何标题。
一些替代方案: