获取动态绑定列表框项

时间:2014-12-30 17:39:20

标签: c# wpf silverlight listbox

我的windows phone 8.1 silverlight应用程序中有以下列表框

        <ListBox  x:Name="ScenarioControl" FontFamily="Segoe WP">
            <ListBox.Resources>
                <Style TargetType="ListBoxItem">
                    <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
                </Style>
            </ListBox.Resources>
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <Border Name="myborder"  Margin="0,0,0,0" BorderThickness="0,0,0,3" BorderBrush="Black">
                        <Grid HorizontalAlignment="Stretch" Margin="0,0,0,0">
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition></ColumnDefinition>
                                <ColumnDefinition Width="auto"></ColumnDefinition>
                            </Grid.ColumnDefinitions>
                            <TextBlock Tap="TextBlock_Tap" HorizontalAlignment="Left" VerticalAlignment="Center"  Text="{Binding Path=Title, Mode=OneTime}" FontFamily="Segoe WP Semibold" Grid.Column="0" FontSize="23"/>
                            <Image Tap="Image_Tap" Source="/Images/blogger_small.png" HorizontalAlignment="Right" VerticalAlignment="Center" Grid.Column="1" OpacityMask="Black"/>
                        </Grid>
                    </Border>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>

正如您所见,TextBlock动态绑定。我需要更改最后一个TextBlock元素的一些属性,但是我找不到在代码中获取精确元素的方法。

我进行了搜索并发现有ItemContainerGenerator方法的解决方案,但这对我不起作用,以下代码行始终返回null。

ListBoxItem item = this.ScenarioControl.ItemContainerGenerator.ContainerFromIndex(ScenarioControl.Items.Count - 1) as ListBoxItem;

2 个答案:

答案 0 :(得分:0)

此问题的最常见原因是,当您调用ItemContainerGenerator时,有问题的项目不可见。大多数列表框等都虚拟化了它们的内容,这意味着它们不会为用户看不到的元素生成UI,所以当你去获取容器时,你只是得到null。

这个Question + Answer(s)总结了这一点,并提供了解决问题的方法。

答案 1 :(得分:0)

使用转换器可以提供帮助。它并非都是声明性的,而是我最初的想法。

Change style of last item in ListBox