Gab*_*Gab 7 .net wpf user-controls wrappanel scrollviewer
好的,这是我的代码.请注意,StackPanel直接位于UserControl中.
<UserControl>
<StackPanel Orientation="Horizontal">
<ScrollViewer Width="450"
VerticalScrollBarVisibility="Auto"
HorizontalScrollBarVisibility="Disabled">
<Rectangle Width="400" Height="4000" Fill="BlanchedAlmond"/>
</ScrollViewer>
<ScrollViewer VerticalScrollBarVisibility="Auto"
HorizontalScrollBarVisibility="Disabled">
<ItemsControl BorderBrush="Green"
BorderThickness="2"
ItemsSource="{Binding Path=MyObservableCollection}"
ItemTemplate="{StaticResource FatTemplate}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel Orientation="Horizontal"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
</ScrollViewer>
</StackPanel>
</UserControl>
Run Code Online (Sandbox Code Playgroud)
(代码已编辑)
请注意,矩形就在那里,因为该滚动查看器的内容无关紧要.
问题是WrapPanel只是水平扩展而不包裹......
我找到了一些解决方案:
为WrapPanel提供绝对宽度(但随后窗口不会调整大小).
将宽度绑定到其父宽度 - ItemsControl或ScrollViewer(ScrollViewer在像这样的有限情况下工作得更好).
Width="{Binding RelativeSource=
{RelativeSource FindAncestor,
AncestorType={x:Type ScrollViewer}},
Path=ActualWidth}"
Run Code Online (Sandbox Code Playgroud)这种技术的问题在于,如果一个控件在StackPanel或Grid旁边,你需要将它绑定到它的父级大小减去旁边的控件.然后是艰难的东西.我构建了一个转换器,它对接收的数字应用数学运算,因此我可以从父宽度中减去给定的宽度:
Width="{Binding RelativeSource=
{RelativeSource FindAncestor,
AncestorType={x:Type UserControl}},
Path=ActualWidth,
Converter={StaticResource Convertisseur_Size_WXYZ},
ConverterParameter=-260}"
Run Code Online (Sandbox Code Playgroud)
但是,由于您无法绑定传递给ConverterParameter的值,
ConverterParameter={Binding ...} (doesn't work)
Run Code Online (Sandbox Code Playgroud)
我想要:
什么是更好的解决方案?
注意:如果有任何不清楚的地方,我可以添加细节.
当ScrollViewer
允许水平滚动时为什么会换行?您应该在以下位置禁用水平滚动ScrollViewer
:
<ScrollViewer VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Disabled">
Run Code Online (Sandbox Code Playgroud)
编辑后编辑:这是因为你StackPanel
的水平方向.水平导向StackPanel
将提供其子请求的任何宽度 - 它根本不会限制它.使用右侧面板,你会没事的.可能你只想要一个Grid
有两列.
归档时间: |
|
查看次数: |
6273 次 |
最近记录: |