Silverlight ItemsControl格式

时间:2011-09-05 12:43:40

标签: silverlight xaml silverlight-4.0

我在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>

1 个答案:

答案 0 :(得分:2)

目前,您基本上每个新行重新开始,根据单个数据条目计算网格列宽度。

问题是你想要跨越行的宽度行为“就像数据网格列”。听起来你实际上想要自定义数据网格并删除你不想要的任何标题。

一些替代方案:

  • 在单位框上设置最小宽度,以便较小的单位,至少对齐。
  • 计算最宽单位的实际宽度,并将该值应用于宽度装订(用于所有“单位”文本块)