在silverlight的ItemsControl模板中设置单个对象的地址c#
本文关键字:单个 对象 地址 设置 silverlight ItemsControl | 更新日期: 2023-09-27 18:09:08
我有一个带有ItemsControl的silverlight应用程序,它显示了一个带有值和分配给它们的单位的项目列表…
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>
Thanks for the help
帽首先从这里获取VisualTreeEnumeration
扩展方法的代码。
现在在数据模板Name="unitText"
中为你的单元TextBlock添加一个Name
属性。
考虑到VisualTreeEnumeration
扩展方法的存在,您现在可以为这些框创建一个"查询":-
IEnumerable<TextBlock> unitBlocks = DataTypesGrid.Descendents()
.OfType<TextBlock>()
.Where(t => t.Name == "unitText");
只要DataTypesGrid
存在,您就可以挂载unitBlocks
。对其使用For Each
将返回ItemsControl
的最新内容。如果需要临时创建List<TextBlock>
,可以使用.ToList()
。