实现一个控件接一个控件(不平滑)滚动面板
本文关键字:一个 控件 滚动 实现 平滑 | 更新日期: 2023-09-27 17:50:47
我有一个FlowLayoutPanel
,包含User Controls
从上到下与垂直滚动条。
和其他可滚动控件一样,我可以逐像素滚动它。
有办法吗?. NET框架或本地API方式)通过User Control
滚动User Control
,以便捕捉到下一个或以前的User Control
?它们可以有不同的高度。
我想复制DataGridView
或Excel/Calc逐行滚动类型。
我这个问题-如何使scrollviewer滚动像素而不是组件(wpf),您期望的行为是不需要的。因此,您可以做用户在所描述的问题中所做的事情。
你的问题和参考的问题之间的本质区别在于主机控制。您已经使用了FlowLayoutPanel
,在参考问题中使用了StackPanel
。
因此,如果您的应用程序是WPF应用程序,您可以将其更改为StackPanel
吗?
设置这些属性AutoScroll=True
与WrapContent=True
在FlowLayoutPanel不工作?
又快又脏的解决方案
设置AutoScroll=false
,增加一个VScrollBar
,添加以下代码:
vScrollBar1.Maximum = MyList.VerticalScroll.Maximum;
vScrollBar1.SmallChange = MyList.VerticalScroll.SmallChange;
vScrollBar1.LargeChange = MyList.VerticalScroll.LargeChange;
vScrollBar1.Scroll += (sender, args) =>
{
switch (args.Type)
{
case ScrollEventType.ThumbTrack:
var sum = 0;
Control prevCtrl = null;
foreach (Control control in MyList.Controls)
{
if (prevCtrl == null || control.Bottom > prevCtrl.Bottom)
{
if (args.OldValue >= sum && args.OldValue < sum + control.Height)
{
MyList.AutoScrollPosition = new Point(0, sum);
}
sum += control.Height;
}
prevCtrl = control;
}
break;
}
}