2011-09-21 42 views
1

我有一个ItemsControl Silverlight应用程序显示了用值,并分配给他们单位的项​​目列表单个对象...地址在Silverlight中与C#一个ItemsControl模板

Some DataType  1.8 XY 
Datatype2   15.6 Units 
Other Datatype  1.8 XTZ 

我是问题单位是自定义的,因此我不能预先知道他们会有多久,我需要他们排队如图所示。所以,在飞行中,我想要解决每个单位文本块,找到具有最大宽度的文本块,并将其余的设置为相同(或将列设置为该宽度)。

如何解决在C#中各个项目控件中生成的每个文本块?

这里是XAML到目前为止

  <ItemsControl Name="DataTypesGrid" ItemsSource="{Binding}" Margin="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> 
            <ColumnDefinition Width="20"></ColumnDefinition> 
          </Grid.ColumnDefinitions> 
           <TextBlock Text="{Binding Name}" HorizontalAlignment="Left" Grid.Column="0" FontSize="15" /> 
           <TextBlock Text="{Binding Value}" HorizontalAlignment="Right" Margin="0,0,4,0" FontSize="15" Grid.Column="1" /> 
           <TextBlock Text="{Binding Unit}" HorizontalAlignment="Left" FontSize="15" Grid.Column="2" /> 
         </Grid> 
         </DataTemplate> 
        </ItemsControl.ItemTemplate> 
       </ItemsControl> 

感谢您的帮助

回答

1

hereVisualTreeEnumeration扩展方法的代码首先弄个。

现在将Name属性添加到数据模板Name="unitText"中的设备TextBlock中。

考虑的VisualTreeEnumeration扩展方法,你现在可以创建盒子“查询”的存在: -

IEnumerable<TextBlock> unitBlocks = DataTypesGrid.Descendents() 
            .OfType<TextBlock>() 
            .Where(t => t.Name == "unitText"); 

可以挂在unitBlocks只要DataTypesGrid存在。使用For Each将返回ItemsControl的最新内容。如果您需要临时创建List<TextBlock>,则可以使用.ToList()

+0

看起来就在现场,我会给它一个去。非常感谢 – Captastic

相关问题