2016-07-21 14 views
0

Ich habe ein CustomControl: ItemsControl welches standardmäßig nur den ersten Eintrag anzeigen soll (ItemTemplate enthält <Grid><TextBlock/><TextBlock/></Grid>).WPF Erstes Element von ItemsControl als Expander Header

Bei Verwendung eines Expanders (und es ist nicht erweitert) kann ich nur den Header anzeigen. Wenn sie erweitert werden, werden alle Elemente angezeigt. Aber eigentlich möchte ich das erste Element als Expander Header anzeigen und wenn es erweitert wird, sollte es alle anderen Elemente der itemsource unterhalb der Überschrift anzeigen.

Hat jemand eine Lösung dafür?

+1

Haben Sie überlegt, eine ComboBox zu verwenden? – Funk

Antwort

0

Wenn ich es richtig verstanden habe, wollen Sie eine erweiterbare Reihe In einem meiner Anwendung, die ich so etwas wie unten haben: enter image description here

Erste Zeile einige Details hat, und durch eine Liste auf der Expander Klick ist gefülltem . in um diese Ansicht zu bauen ich habe ein Datagrid verwendet, die die RowHeaderTemplate einen Expander gesetzt hat:

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

-Code hinter:

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

     } 

Und für RowDetailsTemplate ich eine Vorlage haben, die ein anderes Datagrid ist, so etwas wie dies in den seltensten tags:

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

Das Ergebnis ist im Bild -> eine erweiterbare Reihe, die in den Details ein zeigen Liste anderer Objekte. Sicher, Sie können ListView oder ItemsControl oder etwas anderes, das passt, verwenden. Aber ich denke, das ist ein Modell, das Sie sich anschauen sollten.

Verwandte Themen