11
<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 行にレイアウトし、その下に水平スクロール バーが表示されるのに対して、すべての項目がウィンドウのサイズを超えて右側に「隠されている」ことです。

どうすればそれを防ぐことができますか?

4

1 に答える 1

18

2番目のリストボックスの水平スクロールバーを無効にする必要があります。

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

編集

さらに、最初のリストボックスにScrollViewerを使用する理由がありますか?私が尋ねる理由は、ListBoxにはすでに内部にScrollViewerがあり、そのデフォルトの可視性はAutoであるということです。

于 2011-10-28T11:30:24.327 に答える