2008-12-29 42 views
88

Tôi có một hộp danh sách WPF hiển thị thông báo. Nó chứa một hình đại diện ở phía bên trái và tên người dùng và tin nhắn được xếp chồng lên nhau theo chiều dọc bên phải của hình đại diện. Bố trí là tốt cho đến khi văn bản tin nhắn nên từ bọc, nhưng thay vào đó tôi nhận được một thanh cuộn ngang trên hộp danh sách.Buộc TextBlock để bọc trong WPF ListBox

Tôi đã tìm kiếm và tìm thấy giải pháp cho các vấn đề tương tự, nhưng không có vấn đề nào trong số đó hoạt động.

<ListBox HorizontalContentAlignment="Stretch" ItemsSource="{Binding Path=FriendsTimeline}"> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <StackPanel Orientation="Horizontal"> 
       <Border BorderBrush="DarkBlue" BorderThickness="3" CornerRadius="2" Margin="3" > 
        <Image Height="32" Width="32" Source="{Binding Path=User.ProfileImageUrl}"/> 
       </Border> 
       <StackPanel Orientation="Vertical"> 
        <TextBlock Text="{Binding Path=User.UserName}"/> 
        <TextBlock Text="{Binding Path=Text}" TextWrapping="WrapWithOverflow"/> <!-- This is the textblock I'm having issues with. --> 
       </StackPanel> 
      </StackPanel> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

Trả lời

120

Nội dung của TextBlock có thể được bọc bằng cách sử dụng thuộc tính TextWrapping. Thay vì StackPanel, hãy sử dụng DockPanel/Grid. Một điều nữa - đặt thuộc tính ScrollViewer.HorizontalScrollBarVisibility thành Disabled giá trị cho số ListBox.

Đã cập nhật Hidden thành Disabled dựa trên nhận xét của Matt. Cảm ơn Matt.

+36

Tôi nghĩ rằng bạn cần phải đặt ScrollViewer.HorizontalScrollBarVisibility thành "Disabled" thay vì "Hidden" - nếu không ListBox sẽ vẫn cố gắng cuộn theo chiều ngang, bạn sẽ không thấy thanh cuộn. –

8

Sự cố có thể không nằm trong ListBox. TextBlock sẽ không bao bọc, nếu một trong các điều khiển chính cung cấp đủ không gian, do đó nó không cần phải bọc. Điều này có thể do điều khiển ScrollViewer gây ra.

+0

Cảm ơn! trong trường hợp của tôi vô hiệu hóa cuộn ngang trong listview cố định vấn đề ScrollViewer.HorizontalScrollBarVisibility = "Disabled" – Ateik

0

Nếu bạn muốn ngăn chặn TextBlock phát triển và bạn muốn nó vừa với kích thước của hộp danh sách, bạn nên đặt chiều rộng của nó một cách rõ ràng.

Để thay đổi động, nó có nghĩa là không phải là giá trị sửa lỗi, nhưng bạn cần phải ràng buộc nó với phần tử cha mẹ thích hợp của nó trong cây trực quan. Bạn có thể có một cái gì đó như thế này:

<ListBox ItemsSource="{Binding MyItems}" Name="MyListBox"> 

    <ListBox.Resources> 
    <Style TargetType="ListBoxItem"> 
     <Setter Property="Width" 
       Value="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=ScrollContentPresenter}, Path=ActualWidth}" /> 
    </Style> 
    </ListBox.Resources> 

    <ListBox.ItemTemplate> 
    <DataTemplate> 
     <TextBlock Text="{Binding Title}" TextWrapping="Wrap" /> 
    </DataTemplate> 
    </ListBox.ItemTemplate> 

</ListBox> 

Nếu nó không hoạt động, hãy cố gắng tìm ra các yếu tố thích hợp (trong đó có được binded đến những gì) với sống trực quan Tree trong Visual Studio.

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