使用Windows 10上运行的WinForms fullscreen question中描述的方法考虑全屏C#WinForms应用。当用户使用"滑动"用于滚动的触摸手势(例如,在多行TextBox上)并且到达极值中的任一个,存在一种效果,其在滚动方向上拉动整个窗口显示桌面。这对于全屏应用来说是不可取的。我该怎样摆脱这种影响?
最小例子:
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);
}
}
答案 0 :(得分:1)
在评论类似的无答案question(信用转到defaultlocale),提到可能会阻止此类行为的注册表配置。测试证实它虽然不是最佳的,但却是答案。
要重申,将HKEY_CURRENT_USER\Software\Microsoft\Wisp\Touch
键的值Bouncing
设置为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);
}
}
}