这是我也想知道的效果。
我编写了一个从 ContainerControl 派生的控件,其中子控件可以通过用户交互来增长或缩小。所以我花了一些时间设置自己的 LayoutEngine 来获取子控件所需的布局。但即使是这个动画不间断的 SB 也是肮脏的。我有一个解决方法——请不要把它当作解决方案——在布局方法中,我在进行布局之前将焦点设置在容器控件上。这对我行得通...
rp
另一种解决方法...
is to inherit from the ScrollableControl (Panel, ...) and to
覆盖 WndProc 方法并使用 PreventScrollAnimation 方法。这将吃掉所有在滚动条中有命中测试的 WM_NCMOUSEMOVE 消息。所以这将防止内部开始滚动条的褪色。顺便说一句,衰落是在 VISTA-UI 中使用计时器回调实现的,因此不可能停止它。
const int WM_NCMOUSEMOVE = 160;
const int HTHSCROLL = 6;
const int HTVSCROLL = 7;
bool PreventScrollAnimation(ref Message m)
{
if (m.Msg == WM_NCMOUSEMOVE)
{
if ((m.WParam.ToInt32() == HTHSCROLL) ||
(m.WParam.ToInt32() == HTVSCROLL))
{
m.Result = IntPtr.Zero;
return true;
}
}
return false;
}
protected override void WndProc(ref Message m)
{
if (PreventScrollAnimation(ref m))
return;
base.WndProc(ref m);
}