2011-10-28 10 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> 

をレイアウト右側の列の項目は、ウィンドウの幅を埋めるためにレイアウトされ、その後、新しい行を作成しなければならないということですそれはまさにWrapPanelのためのものです。
問題は、WrapPanelは、水平スクロールバーを表示している1行の項目をレイアウトしているのに対し、すべての項目はウィンドウのサイズを超えて右側に隠れていることです。WrapPanelは、私が欲しいものの代わりにラップするラインの(スクロールバーを表示する)一つの長い水平線内の項目

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

+0

スクロールビューアを削除するとどうなりますか?項目は横スクロールで右に拡大されますか? – dcarneiro

+0

@ダニエルあなたは私を間違えてしまった。 ScrollViewerは最初のListBoxをラップし、マスター/ディテールのシナリオを表す2つのリストボックスがあります。問題はWrapPanelをItemsPanelTemplateとして使用する2番目のListBoxにあります。 – Shimmy

答えて

15

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

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

EDIT

Addtionally、あなたが最初のListBoxのためのScrollViewerのを使用する理由はありますか?私が尋ねる理由は、ListBoxが既に内部的にScrollViewerを持っていて、デフォルトのVisibilityがAutoであるということです。

+4

これがなぜ起こるのかを明らかにするために、 'ListBox'に水平スクロールバーが有効になっている場合(デフォルトでは)、子どもたちに無限の水平空間で自分自身を測定するよう指示します。スクロールバーを削除することによって、 'WrapPanel'に有限の幅を使用させるように強制するので、実際には折り返されます。 –

+0

@SteveGreatrex:ご意見ありがとうございます。 –

関連する問題