В комментариях, аналогичных без ответа вопрос (кредит переходит к defaultlocale), упоминалось о возможной конфигурации реестра, которая могла бы предотвратить такое поведение. Тестирование подтвердило, что ответ будет, хотя и не оптимальным.
Повторим еще раз: установка значения Bouncing
для клавиши HKEY_CURRENT_USER\Software\Microsoft\Wisp\Touch
на 0x0
устранит проблему. К счастью, это индивидуальная настройка, которая очень желательна (нет необходимости в правах администратора / учетной записи).
Модифицированный минимальный пример с «фиксированным» поведением прокрутки прокрутки:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
FormBorderStyle = FormBorderStyle.None;
WindowState = FormWindowState.Maximized;
var tb = new TextBox() { Multiline = true, ScrollBars = ScrollBars.Vertical, Dock = DockStyle.Fill, Text = string.Concat(Enumerable.Repeat("foo! ", 10000)) };
Controls.Add(tb);
DisableBouncing();
FormClosed += (s, e) => RestoreBouncing();//for brevity just on Close
}
int? defaultSetting = null;
private void DisableBouncing()
{
using (var key = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Wisp\Touch", true))
{
defaultSetting = key.GetValue(@"Bouncing", null) as int?;
key.SetValue(@"Bouncing", 0x00000000, RegistryValueKind.DWord);
}
}
private void RestoreBouncing()
{
using (var key = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Wisp\Touch", true))
{
key.SetValue(@"Bouncing", defaultSetting ?? 0, RegistryValueKind.DWord);
}
}
}