2011-09-05 104 views
2

我在Silverlight中有一个ItemsControl来显示对象列表。这些对象包含字符串名称,值和单位,例如“Load”,“100”和“MW”。该控件位于网格列内,根据浏览器窗口的大小可以改变大小。我试图格式化DataTemplate以允许名称字符串位于左侧,值和单位在右侧。例如...Silverlight ItemsControl格式

|Load  100 MW | 
|Load2  50 MW | 
|Unit1  20 X | 
|Unit2  130 YXZ| 

经过大量的试验和错误我已经设法通过使用两栏的网格得到这个工作。左侧包含名称和右侧,包含一个包含值和单位的堆叠面板。这似乎是行得通的,但如果有任何长度不同的单位,文本的排列不起作用。例如...

|Load  100 MW| 
|Load2  50 MW| 
|Unit1  20 X| 
|Unit2  130 YXZ| 

我对如何格式化这方面的想法已经过时了。任何人都可以提出建议重点是我不知道名称,值或单位字符​​串的长度,当主列更改大小时,名称必须保留在左侧,并且值和单位在右侧。

由于提前,第

(这里是到目前为止的代码)

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

回答

2

此刻的你基本上是与每个新行重新开始,基于单一数据录入计算网格的列宽度。

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

一些替代方案:

  • 设置你的单位箱的最小宽度,这样更小的单位,至少,对齐。
  • 计算的最宽部的实际宽度和该值适用于一个宽度结合
+0

感谢您的答复(在所有“单元”的TextBlocks使用)。你是对的,我非常喜欢数据网格功能,事实上这是我的第一选择。然而,当使用格式化时,我发现不可能删除所有格式,更重要的是选择行。我需要它在页面中显示为普通文本,因为它只是显示数据的许多位置之一,我需要它们都具有相同的格式。 我可能不得不坚持最小宽度的想法,尽管计算方法听起来很有趣。我得看看它。谢谢 :) – Captastic

相关问题