WrapPanel размещает элементы в одну длинную горизонтальную линию (отображая полосы прокрутки) вместо линий переноса - PullRequest
10 голосов
/ 28 октября 2011
<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>

Я хочу, чтобы элементы в правом столбце были размещены так, чтобы заполнить ширину окна, а затем создайте новую строку, для этого и предназначена WrapPanel.
Проблема в том, чтоWrapPanel размещает элементы в одну строку, показывая горизонтальную полосу прокрутки внизу, тогда как все элементы «спрятаны» с правой стороны, превышая размер окна.

Как я могу предотвратить это?

1 Ответ

16 голосов
/ 28 октября 2011

Вам необходимо отключить горизонтальную полосу прокрутки второго ListBox.

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

EDIT

Дополнительно, есть причина, по которой вы используете ScrollViewer дляListBox?Я спрашиваю, что у ListBox уже есть ScrollViewer для внутреннего использования, видимость по умолчанию - Auto.

...