2016-07-21 37 views
0

我有一個CustomControl:ItemsControl默認情況下應該只顯示第一個條目(ItemTemplate包含<Grid><TextBlock/><TextBlock/></Grid>)。WPF ItemsControl的第一個元素作爲擴展頭

當使用擴展器(並且它沒有展開)時,我只能顯示標題。展開後,將顯示所有項目。 但實際上我想將第一個項目顯示爲Expander Header,當展開時它應該在標題下面顯示itemsource的所有其他項目。

有沒有人有解決方案?

+1

您是否考慮過使用ComboBox? – Funk

回答

0

如果我理解正確的話,你想要一個可擴展的行 在我的應用程序之一,我有類似如下: enter image description here

第一行有一些細節,並通過點擊擴展列表填充在 爲了建立這個觀點我用它具有RowHeaderTemplate設置爲一個擴展一個DataGrid:

<DataGrid.RowHeaderTemplate> 
         <DataTemplate> 
          <telerik:RadExpander x:Name="AddressExpander" telerik:AnimationManager.IsAnimationEnabled="True" Expanded="Address_Expander_Expanded" Collapsed="Address_Expander_Collapsed"> 
          </telerik:RadExpander> 
         </DataTemplate> 
        </DataGrid.RowHeaderTemplate> 

後面的代碼:

private void Address_Expander_Expanded(object sender, RoutedEventArgs e) 
     { 
      var s = e.OriginalSource as FrameworkElement; 
      var expander = s as RadExpander; 
      if (expander != null) 
      { 
       var parentRow = s.ParentOfType<DataGridRow>(); 
       if (parentRow != null) 
       { 
        parentRow.IsSelected = true; 
        parentRow.DetailsVisibility = Visibility.Visible; 
       } 
      } 

     } 

     private void Address_Expander_Collapsed(object sender, RoutedEventArgs e) 
     { 
      var s = e.OriginalSource as FrameworkElement; 
      var expander = s as RadExpander; 
      if (expander != null) 
      { 
       var parentRow = s.ParentOfType<DataGridRow>(); 
       if (parentRow != null) 
       { 
        parentRow.IsSelected = false; 
        parentRow.DetailsVisibility = Visibility.Collapsed; 
       } 
      } 

     } 

而對於RowDetailsTemplate我有一個模板,這是另一種的DataGrid,在極少數的標籤是這樣的:

<DataGrid.RowDetailsTemplate> 
         <DataTemplate> 
<DataGrid Itemsource = {Binding *property of parent viewmodel here*} /> 
    </DataTemplate> 
        </DataGrid.RowDetailsTemplate> 

結果是在圖片 - >可擴展行,這樣可以在細節上顯示其他對象列表。當然,你可以使用ListView或ItemsControl或其他適合的東西。 但我認爲這是一個你應該看看的模型。