2012-10-24 17 views
5

Ho un ListView WPF molto semplice che sto usando per elencare blocchi di testo. Mi piacerebbe che scorresse verticalmente, ma il testo dovrebbe essere avvolto in modo che non ci sia scorrimento orizzontale. Tutti gli esempi che ho visto sono soluzioni di nidificazione di DataGridView troppo complicate. Tuttavia, sembra un caso d'uso così semplice. Qui è il mio codice corrente:Come si avvolge il contenuto in un ListView WPF?

<ListView 
     Height="Auto" 
     Width="Auto" 
     Margin="0" 
     Name="mLogListView" 
     FontWeight="Bold" 
     FontSize="16" 
     SelectionMode="Single" 
     ScrollViewer.HorizontalScrollBarVisibility="Disabled" 
     HorizontalContentAlignment="Stretch"/> 

Ho provato l'impostazione delle proprietà ScrollViewer.HorizontalScrollBarVisibility e HorizontalContentAlignment ma il testo corre semplicemente fuori la fine del controllo e non va a capo.

Ogni articolo è aggiunto alla collezione ListView.Items ed è un oggetto ListViewItem. Il testo è impostato sulla proprietà Content dell'articolo.

Ecco il codice responsabile per l'aggiunta di testo volte alla lista:

ListViewItem item = new ListViewItem();    
item.Content = "Item text is set here, but refuses to wrap in list view!"; 
mLogListView.Items.Add(item); 

Grazie.

risposta

14

questo dovrebbe essere quello che ti serve

<ListView Margin="12,23,309,191" 
     Name="mLogListView" 
     FontWeight="Bold" 
     FontSize="16" 
     SelectionMode="Single" 
     ScrollViewer.HorizontalScrollBarVisibility="Disabled" 
     HorizontalContentAlignment="Stretch" > 
<!-- here set the itemTemplate to a TextBlock that can wraps--> 
     <ListView.ItemTemplate> 
      <DataTemplate> 
       <TextBlock Text="{Binding Path=.}" TextWrapping="Wrap"></TextBlock> 
      </DataTemplate> 
     </ListView.ItemTemplate> 
</ListView> 

Nota la sintassi Text="{Binding Path=.}" che è equivalente a Text="{Binding}". Si chiama sintassi di associazione vuota.

In questo caso, Text è associato all'intero oggetto ListViewItem. La sintassi di associazione vuota è utile quando si desidera associare l'intero oggetto all'oggetto anziché solo alla singola proprietà dell'oggetto.

Questo è utile per l'esempio perché l'oggetto di origine (il ListViewItem) è di tipo stringa e si desidera semplicemente eseguire il binding alla stringa stessa.

Per ulteriori informazioni vedere msdn nella sezione specificando il percorso al Valore

+0

Questo collegamento msdn è ora morto. Prova questo: https://msdn.microsoft.com/en-us/library/vstudio/ms752347(v=vs.100).aspx#specifying_the_path_to_the_value – Detail

0

volevo visualizzare le immagini in un controllo ListView, viene visualizzato di default una sola colonna. Per evitare questo, è possibile inserire il seguente codice:

<ListView.ItemsPanel> 
    <ItemsPanelTemplate> 
     <WrapPanel Margin="0" /> 
    </ItemsPanelTemplate> 
</ListView.ItemsPanel> 

ora visualizza ListView, invece di una colonna, solo una linea :-( Per evitare questo, è possibile inserire questa riga di codice:

ScrollViewer.HorizontalScrollBarVisibility="Disabled" 

Così potrebbe essere simile a questa:

<ListView ItemsSource="{Binding YourItemsSource...}" 
      ScrollViewer.HorizontalScrollBarVisibility="Disabled"> 
    <ListView.ItemsPanel> 
     <ItemsPanelTemplate> 
      <WrapPanel /> 
     </ItemsPanelTemplate> 
    </ListView.ItemsPanel> 
    <ListView.ItemTemplate> 
     <DataTemplate> 
      <Border ... and so on ... 

spero, può aiutare qualcuno ;-)