轻扫滚动显示全屏 WinForms 应用中的桌面



请考虑使用在 Windows 10 上运行的 WinForms 全屏问题中所述的方法进行全屏 C# WinForms 应用。当用户使用"轻扫"触摸手势进行滚动(例如,在多行文本框上)并达到任一极值时,会出现一种效果,即在滚动方向上拉动整个窗口,从而显示桌面。这对于全屏应用来说是不可取的。我怎样才能摆脱这种影响?


最小示例:

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);
}
}

在评论中类似的无答案问题(功劳归于默认区域设置),提到了可以防止此类行为的可能的注册表配置。测试证实,虽然不是最佳的,但它将是答案。 重申一下,将HKEY_CURRENT_USERSoftwareMicrosoftWispTouch键的值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(@"SoftwareMicrosoftWispTouch", true))
{
defaultSetting = key.GetValue(@"Bouncing", null) as int?;
key.SetValue(@"Bouncing", 0x00000000, RegistryValueKind.DWord);
}
}
private void RestoreBouncing()
{
using (var key = Registry.CurrentUser.OpenSubKey(@"SoftwareMicrosoftWispTouch", true))
{
key.SetValue(@"Bouncing", defaultSetting ?? 0, RegistryValueKind.DWord);
}
}
}

最新更新