问题与滚动查看器内的WPF WrapPanel

问题与滚动查看器内的WPF WrapPanel

问题描述:

在SO上有一些类似的问题,但到目前为止,我还没有能够解决我的问题,使用它们。问题与滚动查看器内的WPF WrapPanel

我在WrapPanel里面有一堆控件,而WrapPanel在ScrollViewer里面。 ScrollViewer位于网格中。

我试图让WrapPanel中的所有<Border>控件具有“垂直”的方向(以便它们向下流动,并且当没有更多空间垂直放置时,它们会水平地包装),并在出现时出现一个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

尝试改变'ScrollViewer'的'width'到'宽度= “{结合的ElementName = configGrid,路径=宽度}”'或只是删除'宽度' – Gopichandar

您必须从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