2012-11-23 58 views
0

我有一個LongListSelector綁定到一個可觀察的對象集合,並在LongListSelector上點擊可以垂直展開點擊的項目。但是,再次點擊(縮小項目)時,項目的高度保持原樣。這在列出的數據中留下了巨大的差距。當你再次展開/收縮時,問題就消失了,這件事只會發生一次,這真的很奇怪。我得出的結論是每個項目模板中的LongListSelector網格沒有正確更新(它被設置爲Auto)。XAML LongListSelector不更新項目模板大小

我已經看了一下,一般的反應是重置項目模板中網格的大小。雖然我更喜歡更優雅的解決方案,因爲這需要獲取網格並重置它的高度值。

下面是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

我對WP8中的LLS有同樣的問題,在WP7中它的作用就像一個魅力。 我發現當它垂直縮小我的項目時,MeasureOverride和ArrangeOverride不會被調用。在正確調整大小的同時,調用這些方法。奇怪的行爲。 –

回答

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; 
}