我有一个LongListSelector绑定到一个observable对象集合,并且点击LongListSelector会垂直展开所点击的项目。但是,再次敲击(缩小项目)时,项目的高度保持不变。这使得列出的数据存在巨大差距。当你再次展开/缩小它时,问题就会消失,这个东西每个项目只发生一次,这真的很奇怪。我得出的结论是每个项目模板中的LongListSelector网格没有正确更新(它被设置为Auto)。
我已经浏览了一下,一般的反应是在itemtemplate中重置Grid的大小。虽然我更喜欢更优雅的解决方案,因为这需要获取网格并重置它的高度值。
以下是LongListSelector的代码:
<phone:LongListSelector x:Name="all_items_list" Margin="0,0,-12,0" ItemsSource="{Binding All_Items}" Tap="item_list_Tap" ItemTemplate="{StaticResource all_down_template}"/>
这是ItemTemplate:
<DataTemplate x:Key="all_down_template" x:Name="template">
<Grid x:Name="grid" Margin="0,0,0,15">
<!--Show this when shrunk-->
<TextBlock Text="{Binding Name}" Style="{StaticResource PhoneTextExtraLargeStyle}" FontSize="19" Height="25" VerticalAlignment="Top" Margin="45,0,10,0" TextWrapping="Wrap"/>
<!-- Show this when expanded -->
<ProgressBar Value="{Binding Percent}" Foreground="{Binding ProgressBar}" BorderBrush="{Binding ProgressBar}" Margin="34,20,0,0" HorizontalAlignment="Left" Width="421" Height="25" Visibility="{Binding Visibility}" VerticalAlignment="Top"/>
</Grid>
</DataTemplate>
但在所有示例中,没有人使用LongListSelector。我查看了LongListSelector中的所有功能,似乎没有显示所选项目ItemTemplate。 注意:我可以在LongListSelector上使用FindName,但只能获取DataTemplate(我已经可以使用其x:Name访问),从那里,我无法对DataTemplate做任何事情。
如果有人知道解决方案,那就太棒了!
感谢。
答案 0 :(得分:0)
我通过三次更改“可见性”来解决此错误,等待每次之间的布局传递。我通过链接SizeChanged处理程序来完成此操作,如下所示。
private void OnToggleText(object sender, System.Windows.Input.GestureEventArgs e)
{
Grid g = (Grid)sender;
g.Children[1].Visibility = g.Children[1].Visibility == Visibility.Collapsed ? Visibility.Visible : Visibility.Collapsed;
g.SizeChanged += g_SizeChanged;
}
void g_SizeChanged(object sender, SizeChangedEventArgs e)
{
Grid g = (Grid)sender;
g.SizeChanged -= g_SizeChanged;
g.SizeChanged += g_SizeChanged2;
g.Children[1].Visibility = g.Children[1].Visibility == Visibility.Collapsed ? Visibility.Visible : Visibility.Collapsed;
}
void g_SizeChanged2(object sender, SizeChangedEventArgs e)
{
Grid g = (Grid)sender;
g.SizeChanged -= g_SizeChanged2;
g.Children[1].Visibility = g.Children[1].Visibility == Visibility.Collapsed ? Visibility.Visible : Visibility.Collapsed;
}