我有一个带有ItemsControl的silverlight应用程序,它显示了一个包含值和单位的项目列表...
Some DataType 1.8 XY
Datatype2 15.6 Units
Other Datatype 1.8 XTZ
我遇到的问题是单位是自定义的,因此我无法提前知道它们将持续多久,我需要它们如图所示排列。因此,在运行中,我想要解决每个单元文本块,找到宽度最大的文本块并将其余部分设置为相同(或将列设置为该宽度)。
如何在C#中单独处理items控件中生成的每个文本块?
到目前为止,这是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>
感谢您的帮助
第
答案 0 :(得分:1)
首先从here获取VisualTreeEnumeration
扩展方法的代码。
现在在数据模板Name
中为您的单位TextBlock添加Name="unitText"
属性。
如果存在VisualTreeEnumeration
扩展方法,您现在可以为这些框创建“查询”: -
IEnumerable<TextBlock> unitBlocks = DataTypesGrid.Descendents()
.OfType<TextBlock>()
.Where(t => t.Name == "unitText");
只要unitBlocks
存在,您就可以继续DataTypesGrid
。在其上使用For Each
将返回ItemsControl
的最新内容。如果您需要临时创建.ToList()
。
List<TextBlock>