2012-03-29 101 views
3

我正在使用WindowsPhone工具包的ExpanderView,并在第一次加载我的扩展扩展器将总是看起来像第二张图片。看起来,它总是在同一个高度的所有项目在一起。ExpanderView不显示所有项目

如果我转到另一页并返回,一切都会好起来,布局看起来很安静 - 除了停止扩展器(图1)的行。

无论是this.UpdatedLayout();(当前页)还是ExpanderView.UpdateLayout();解决了一切。 未显示的项目已完全加载到该列表中。

part 1

part 2

<ItemsControl ItemsSource="{Binding EpisodeList}" Margin="20,0,0,0" Grid.Row="1" Grid.ColumnSpan="2"> 
<ItemsControl.ItemTemplate> 
    <DataTemplate> 
     <StackPanel> 
      <toolkit:ExpanderView ItemsSource="{Binding Value}" > 
       <toolkit:ExpanderView.Header> 
        <TextBlock Margin="0,0,10,0"> 
      <Run Text="Season "/> 
      <Run Text="{Binding Key}" /> 
        </TextBlock> 
       </toolkit:ExpanderView.Header> 
       <toolkit:ExpanderView.ItemTemplate> 
        <DataTemplate> 
         <Border BorderBrush="White" BorderThickness="1" Margin="5"> 
          <Grid MouseLeftButtonUp="Grid_MouseLeftButtonUp"> 
           <Grid.ColumnDefinitions> 
            <ColumnDefinition Width="Auto"/> 
            <ColumnDefinition /> 
           </Grid.ColumnDefinitions> 
           <Image Height="40" Source="{Binding ScreenCap}" Margin="5,0,0,0"/> 
           <TextBlock x:Name="t" Margin="10" Text="{Binding Title}" TextWrapping="Wrap" Grid.Column="1" /> 
          </Grid> 
         </Border> 
        </DataTemplate> 
       </toolkit:ExpanderView.ItemTemplate> 

      </toolkit:ExpanderView> 
     </StackPanel> 
    </DataTemplate> 
</ItemsControl.ItemTemplate> 
</ItemsControl> 

EpisodeList是词典的类型(INT,的ObservableCollection(MyClass的)),并实现INotifyPropertyChanged

如果任何人有怎么回事错在这里的任何计划,我真的会感谢您的帮助,我只是没有发现任何关于谷歌的错误报告,也没有发现类似的错误。

(调试的设备上,以及在仿真器)

+0

有一次我有'ExpanderView'了类似的问题。它显示2048px的内容“高度”。也许它是类似的... – Ku6opr 2012-03-29 17:06:56

+0

你能解决它吗? – user1021605 2012-03-29 22:41:19

回答

6

我设法用一个列表框为itemcontainer,并扩展项目结合到它解决这个问题:

    <Controls:ExpanderView Expanded="ExpanderView_Expanded" 
         Header="{Binding}"        
         HeaderTemplate="{StaticResource HeaderTemplate}"                    
         NonExpandableHeader="{Binding}" 
         ExpanderTemplate="{StaticResource ExpanderTemplate}" 
         NonExpandableHeaderTemplate="{StaticResource NonExpandableHeaderTemplate}" 
         Expander="{Binding}" 
         > 
         <ListBox ScrollViewer.VerticalScrollBarVisibility="Disabled" ItemTemplate="{StaticResource ItemTemplate}" ItemsSource="{Binding Items}" /> 
        </Controls:ExpanderView> 
+1

这应该被标记为答案,它像一个魅力工作! – Ateik 2012-05-02 11:05:54

0

我有类似的问题与ExpanderView。我认为这可能是一个错误,与2048px的限制有关。基本上,当我将大量项目添加到扩展的ExpanderView时,一切都很好,直到我折叠视图并再次展开它。展开ExpanderView之后,2048像素之后的任何项目都不会显示,除非我点击它们或滚动它,甚至只有在移动时它们才会显示(项目的点击动画正在运行或列表是在移动中)。

我注意到,如果我在ExpanderView中添加了一个项目,或者它在展开时从其中移除了一个项目,那么小故障就会消失,直到下一次我折叠并扩展项目,所以我做了一个快速的工作来添加和删除虚拟项目视图时以往任何时候都通过使用ExpanderView的Expanded-和LayoutUpdated-事件扩大。基本上这是我做的:

  • 设置状态以指示展开正在进行中并存储展开的视图供以后使用。 (在扩展的事件处理程序)
  • 等待,直到所有的Expanderviews'布局更新(使用LayoutUpdated事件处理程序来跟踪这个)
  • 添加虚拟物品到已扩大ExpanderView(在LayoutUpdated事件处理程序)
  • 等待,直到所有的Expanderviews'布局更新
  • (在LayoutUpdated事件处理程序)

丑陋的解决方案,卸掉虚拟物品,但也许我最好能想出。希望这对你的问题有所帮助。

编辑: 不上的扩展件事,停止线帮助。只是无法让那个人工作..

+0

也许我只需要一些咖啡,但是我的ExpanderView只是在物品上有一个吸气剂 - 因此我不能直接添加或移除一个物品。我现在试图存储和恢复ItemsSource数据,但不会改变任何东西。我加入ExpandedEvent,存储发件人并添加LayoutUpdated事件。在LayoutUpdated中,我临时存储ItemsSource,将发件人设置为null。布局后会再次更新,现在我恢复Itemssource并删除LayoutUpdated事件 – user1021605 2012-04-02 10:09:03

+0

为了澄清一点,我实际上不直接将项目添加到ExpanderView,而是添加到设置为项目源的可观察列表ExpanderView。 – user1305758 2012-04-02 15:36:25

+0

工作!感谢您的解决方法:) – user1021605 2012-04-03 09:54:22