在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

在silverlight的ItemsControl模板中设置单个对象的地址c#

首先从这里获取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()