滑动滚动显示全屏WinForms应用程序中的桌面

时间:2018-05-16 08:25:10

标签: c# winforms windows-10 touch

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

1 个答案:

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