2011-10-28 27 views
10
<Grid.ColumnDefinitions> 
    <ColumnDefinition Width="Auto"/> 
    <ColumnDefinition /> 
</Grid.ColumnDefinitions> 

<Grid.RowDefinitions> 
    <RowDefinition Height="Auto"/> 
    <RowDefinition/> 
    <RowDefinition Height="40"/> 
</Grid.RowDefinitions> 

<c:SearchTextBox Grid.ColumnSpan="2" .../> 

<ScrollViewer VerticalScrollBarVisibility="Auto" Grid.Row="1"> 
    <ListBox 
    ItemsSource="{Binding Categories}" 
    IsSynchronizedWithCurrentItem="True" 
    ... /> 
</ScrollViewer> 

<!-- Here is what I'm talking about:--> 
<ListBox ItemsSource="{Binding Products}" 
    IsSynchronizedWithCurrentItem="True" Grid.Column="1" Grid.Row="1"> 
    <ListBox.ItemsPanel> 
    <ItemsPanelTemplate> 
     <WrapPanel /> 
    </ItemsPanelTemplate> 
    </ListBox.ItemsPanel> 
</ListBox> 

Điều tôi muốn là các mục trong cột phải được đặt ra để lấp đầy chiều rộng cửa sổ, và sau đó tạo một dòng mới , đó chính xác là những gì mà WrapPanel được tạo ra.
Vấn đề là, WrapPanel đưa ra các mục chỉ trong một dòng hiển thị thanh cuộn ngang bên dưới trong khi tất cả các mục được 'ẩn' ở phía bên phải vượt quá kích thước của cửa sổ.WrapPanel đưa ra các mục trong một đường ngang dài (hiển thị thanh cuộn) thay vì gói các dòng

Làm cách nào để ngăn chặn điều đó?

+0

điều gì sẽ xảy ra nếu bạn xóa trình xem scroller? các mục vẫn mở rộng sang phải với một cuộn ngang? – dcarneiro

+0

@Daniel bạn đã cho tôi sai. Các ScrollViewer kết thúc tốt đẹp ListBox đầu tiên có 2 ListBoxes đại diện cho một kịch bản chi tiết tổng thể. Vấn đề là với ListBox thứ 2 sử dụng WrapPanel như một ItemsPanelTemplate của nó. – Shimmy

Trả lời

15

Bạn cần phải làm cho thanh cuộn ngang của ListBox thứ hai vô hiệu hóa.

<ListBox ItemsSource="{Binding}" 
     ScrollViewer.HorizontalScrollBarVisibility="Disabled" ...> 
.... 
</ListBox> 

EDIT

Addtionally, có lý do mà bạn sử dụng ScrollViewer cho ListBox đầu tiên? Tại sao tôi hỏi là ListBox đã có ScrollViewer nội bộ, trong đó Visibility mặc định là Auto.

+4

Để làm rõ lý do tại sao điều này xảy ra, nếu 'ListBox' có thanh cuộn ngang được bật (mặc định là theo mặc định) thì nó sẽ báo cho các con của nó tự đo mình trong không gian ngang vô hạn. Bằng cách loại bỏ các thanh cuộn, bạn buộc 'WrapPanel' sử dụng một chiều rộng hữu hạn và do đó nó sẽ thực sự quấn. –

+0

@SteveGreatrex: Cảm ơn bạn đã bình luận. –

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