我的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;
答案 0 :(得分:0)
此问题的最常见原因是,当您调用ItemContainerGenerator时,有问题的项目不可见。大多数列表框等都虚拟化了它们的内容,这意味着它们不会为用户看不到的元素生成UI,所以当你去获取容器时,你只是得到null。
这个Question + Answer(s)总结了这一点,并提供了解决问题的方法。
答案 1 :(得分:0)
使用转换器可以提供帮助。它并非都是声明性的,而是我最初的想法。