2009-09-20 16 views
6

mi hanno un controllo di elementi che è destinato a una raccolta di oggetti. L'oggetto ha due proprietà (nome, valore) che visualizzo rispettivamente in un blocco di testo e in una casella di testo. L'elenco è piuttosto lungo e vorrei mostrarlo in due colonne. Quindi la mia domanda è, c'è un modo per ottenere un controllo Item per mostrare i suoi elementi in due colonne?Mostra elementi in un ItemsControl in due colonne (WPF)

P.S: La collezione è popolato in fase di esecuzione e non so quanti elementi dovrò mostrare!

risposta

5

tendo a mettere gli elementi in WrapPanel, e quindi impostare la larghezza del pannello di essere 2x la larghezza dell'elemento. Questo mi dà delle belle colonne con un numero arbitrario di elementi. Se le larghezze dell'oggetto sono diverse, inserisco ogni oggetto nel suo Grid o StackPanel di larghezza fissa.

+0

Grazie per la risposta. Ci proverò. Ma ho il sospetto che questo possa rovinare la mia interfaccia utente quando l'utente ridimensiona il riquadro/finestra. Non c'è un modo più elegante per farlo? Forse usando una griglia all'interno del parametro items del controllo items? –

11

Utilizzare un ListBox e specificare un DataTemplate in cui inserire sia TextBlock che TextBox. Usa i binding per popolare entrambi. Vedi http://msdn.microsoft.com/en-us/library/ms742521.aspx per altri esempi.

<ListBox x:Name="TheListBox"> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <Grid> 
       <Grid.ColumnDefinitions> 
        <ColumnDefinition Width="Auto" SharedSizeGroup="Key" /> 
        <ColumnDefinition Width="*" /> 
       </Grid.ColumnDefinitions> 

       <TextBlock Text="{Binding Name}" /> 
       <TextBox Grid.Column="1" Text="{Binding Value }" /> 
      </Grid> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

TheListBox.ItemsSource = CollectionOfObjects; 
+1

L'elemento veramente critico (e non intuitivo, credo) di questo modello è SharedSizeGroup. Dico "non intuitivo" perché pensi intuitivamente "Voglio mostrare i miei oggetti in una griglia", non "Voglio mostrare i miei elementi in molte griglie le cui colonne si ridimensionano in modo interdipendente. –

+9

Quando ho provato questo su un ItemsControl (non un ListBox), ho dovuto impostare una proprietà su ItemsControl: Grid.IsSharedSizeScope = "True" per farlo funzionare. –

Problemi correlati