问题与滚动查看器内的WPF WrapPanel
问题描述:
在SO上有一些类似的问题,但到目前为止,我还没有能够解决我的问题,使用它们。问题与滚动查看器内的WPF WrapPanel
我在WrapPanel里面有一堆控件,而WrapPanel在ScrollViewer里面。 ScrollViewer位于网格中。
我试图让WrapPanel中的所有<Border>
控件具有“垂直”的方向(以便它们向下流动,并且当没有更多空间垂直放置时,它们会水平地包装),并在出现时出现一个HorizontalScrollBar没有更多的空间离开水平。
到目前为止我的代码如下:
<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而非水平)
任何帮助,将不胜感激。
答
您必须从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
尝试改变'ScrollViewer'的'width'到'宽度= “{结合的ElementName = configGrid,路径=宽度}”'或只是删除'宽度' – Gopichandar