如何在动画期间冻结控件上的滚动?
How to freeze scroll on a control during animation?
C#、WinForms,我自己制作了名为 ListOfControls
的 UserControl
,它采用其他 controls
并将它们显示为垂直布局,如下所示:
|-------------------|
| Control 1 |
|-------------------|
|-------------------|
| Control 2 |
|-------------------|
|-------------------|
| Control 3 |
|-------------------|
正如您想象的那样,列表变大了,所以我在 ListOfControls
上应用了 AutoScroll
。例如,现在有时我想在运行时交换 Control 1
和 26
。因为 Control 26
远低于当前可见区域(用户只能看到前 9 个控件,然后他必须滚动)我必须考虑 ListOfControls
的 VerticalScroll.Value
关键在于:控件的切换是动画的(Control 1
向下移动,Control 26
向上移动)并且 AutoScroll
已启用,因此在动画期间滚动会尝试考虑为它但最终完全弄乱了控件的最终位置。
有没有办法将滚动条冻结在当前位置并等待动画结束?
为了防止在移动控件时发生的自动滚动烟花,最好自己控制环境。将 AutoScroll 属性 设置为 false,并将 AutoScrollMinSize 属性 设置为 canvas 您的控件占用的大小。
C#、WinForms,我自己制作了名为 ListOfControls
的 UserControl
,它采用其他 controls
并将它们显示为垂直布局,如下所示:
|-------------------|
| Control 1 |
|-------------------|
|-------------------|
| Control 2 |
|-------------------|
|-------------------|
| Control 3 |
|-------------------|
正如您想象的那样,列表变大了,所以我在 ListOfControls
上应用了 AutoScroll
。例如,现在有时我想在运行时交换 Control 1
和 26
。因为 Control 26
远低于当前可见区域(用户只能看到前 9 个控件,然后他必须滚动)我必须考虑 ListOfControls
VerticalScroll.Value
关键在于:控件的切换是动画的(Control 1
向下移动,Control 26
向上移动)并且 AutoScroll
已启用,因此在动画期间滚动会尝试考虑为它但最终完全弄乱了控件的最终位置。
有没有办法将滚动条冻结在当前位置并等待动画结束?
为了防止在移动控件时发生的自动滚动烟花,最好自己控制环境。将 AutoScroll 属性 设置为 false,并将 AutoScrollMinSize 属性 设置为 canvas 您的控件占用的大小。