2016-09-28 59 views
0

これに似た質問がいくつかありますが、これまで私は問題を解決できませんでした。ScrollViewer内のWPF WrapPanelの問題

私はWrapPanelの中​​に複数のコントロールがあり、WrapPanelはScrollViewerの中にあります。 ScrollViewerはグリッド内にあります。

WrapPanelのすべてのコントロールにOrientationを 'Vertical'に設定しようとしています(フローが下がり、垂直方向に左にスペースがなくなると水平方向に折り返すようにします)、Horizo​​ntalScrollBarそれ以上のスペースは水平になりません。次のようにこれまで

私のコードは次のとおりです。

<Grid x:Name="configGrid"> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="*" />        
    </Grid.ColumnDefinitions> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="*" /> 
    </Grid.RowDefinitions> 

    <ScrollViewer Grid.Row="0" VerticalScrollBarVisibility="Disabled" HorizontalScrollBarVisibility="Auto" Width="{Binding ElementName=configGrid, Path=ActualWidth}" Height="{Binding ElementName=configGrid, Path=ActualHeight}"> 
     <WrapPanel HorizontalAlignment="Left" Orientation="Vertical" x:Name="ConfigWrapPanel" Width="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ScrollViewer}}, Path=ActualWidth}"> 

      <Border BorderBrush="White" BorderThickness="1,1,1,1" CornerRadius="2" Margin="10"> 
       <Expander IsExpanded="True" BorderThickness="0" Header="General"> 
        // some controls here 
       </Expander> 
      </Border> 

      <Border BorderBrush="White" BorderThickness="1,1,1,1" CornerRadius="2" Margin="10"> 
       <Expander IsExpanded="True" BorderThickness="0" Header="Another Block"> 
        // some controls here 
       </Expander> 
      </Border> 

      // many more <border> blocks here.... 

     </WrapPanel> 
    </ScrollViewer> 
</Grid> 

予想通り、このほとんど作品、様々なコンテンツが垂直方向に流れ、底に十分なスペースがない場合には、アップと右に移動してから始まりますもう一度トップ。しかし、私は決して水平スクロールバーを取得せず、コントロールは画面の右から消えるだけです。

私はこれが本当にシンプルなものだと確信していますが、私はそれを理解できません。

さらなる情報のビットとして、様々なボーダーコントロールとサブ要素が(私は垂直方向を選んだ理由であるWrapPanelなく横長より)動的幅および高さの全てである

任意の助けいただければ幸い。

+0

は '幅= "{のElementName = configGrid結合、パス=幅}"'またはだけが 'を除去するために、 'ScrollViewer'の' width'を変更してみてください幅 ' – Gopichandar

答えて

1

WrapPanelからWidthを削除する必要があります。

この幅は無限に伸びたいので、ScrollViewerがWrapPanelの境界を測定してScrollBarを表示しないようにすることができません。

以下のコードは、実施例を示している:

<Grid x:Name="configGrid"> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="*"></ColumnDefinition> 
     </Grid.ColumnDefinitions> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="*" /> 
     </Grid.RowDefinitions> 

     <ScrollViewer Grid.Row="0" VerticalScrollBarVisibility="Disabled" HorizontalScrollBarVisibility="Auto" Height="{Binding ElementName=configGrid, Path=ActualHeight}"> 
      <WrapPanel HorizontalAlignment="Left" Orientation="Vertical" x:Name="ConfigWrapPanel" > 

       <Border BorderBrush="White" BorderThickness="1,1,1,1" CornerRadius="2" Margin="10"> 
        <Expander IsExpanded="True" BorderThickness="0" Header="General"> 
         // some controls here 
        </Expander> 
       </Border> 

       <Border BorderBrush="White" BorderThickness="1,1,1,1" CornerRadius="2" Margin="10"> 
        <Expander IsExpanded="True" BorderThickness="0" Header="Another Block"> 
         // some controls here 
        </Expander> 
       </Border> 


      </WrapPanel> 
     </ScrollViewer> 
    </Grid> 
+0

それはトリックを行います。説明に感謝します。 – Asnivor

関連する問題