2012-10-24 28 views
5

Tôi có một ListView WPF rất đơn giản mà tôi đang sử dụng để liệt kê các khối văn bản. Tôi muốn nó cuộn theo chiều dọc, nhưng văn bản nên được bọc để không có cuộn ngang. Tất cả các ví dụ mà tôi đã thấy là các giải pháp lồng ghép DataGridView quá phức tạp. Điều này có vẻ như một trường hợp sử dụng đơn giản như vậy, tuy nhiên. Đây là mã hiện tại của tôi:Làm cách nào để bọc nội dung trong một ListView WPF?

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

Tôi đã cố gắng thiết lập các thuộc tính ScrollViewer.HorizontalScrollBarVisibility và HorizontalContentAlignment nhưng các văn bản chỉ cần chạy ra khỏi cuối của sự kiểm soát và không quấn.

Mỗi mục được thêm vào bộ sưu tập ListView.Items và là đối tượng ListViewItem. Văn bản được đặt thành thuộc tính Content của mục.

Đây là mã chịu trách nhiệm cho việc thêm lần văn bản vào danh sách:

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

Cảm ơn bạn.

Trả lời

14

này nên được những gì bạn cần

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

Lưu ý cú pháp Text="{Binding Path=.}" đó là tương đương với Text="{Binding}". Điều này được gọi là cú pháp ràng buộc trống.

Trong trường hợp này Text bị ràng buộc với toàn bộ đối tượng ListViewItem. Cú pháp ràng buộc rỗng có ích khi bạn muốn liên kết với toàn bộ đối tượng thay vì chỉ đến một thuộc tính duy nhất của mục đó.

Điều này thuận tiện cho ví dụ vì đối tượng nguồn (ListViewItem) có kiểu chuỗi và bạn chỉ muốn liên kết với chính chuỗi đó.

Để biết thêm thông tin, xem msdn tại phần Xác định đường dẫn đến giá trị

+0

Liên kết msdn đó hiện đã chết. Hãy thử cách này: https://msdn.microsoft.com/en-us/library/vstudio/ms752347(v=vs.100).aspx#specifying_the_path_to_the_value – Detail

0

Tôi muốn xem hình ảnh trong một ListView, nó sẽ hiển thị theo mặc định chỉ có một cột. Để tránh điều này, bạn có thể chèn đoạn mã sau:

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

Bây giờ hiển thị ListView, thay vì một cột, chỉ cần một dòng :-( Để tránh điều này, bạn có thể chèn dòng mã này:

ScrollViewer.HorizontalScrollBarVisibility="Disabled" 

Vì vậy, nó có thể trông giống như thế này:

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

tôi hy vọng, nó có thể giúp một người nào đó ;-)

Các vấn đề liên quan