2012-03-29 53 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