具有触摸惯性的WPF列表框可以拉下整个窗口

Mar*_*ark 17 c# wpf listbox touch

我有一个专为触摸显示器设计的全屏WPF应用程序,我Listbox在主屏幕上有一些s.

当我轻弹"列表框"时它滚动得很好,但当它到达列表的末尾时,整个应用程序从屏幕顶部被拉下来,我可以以某种方式停止这种行为吗?

有没有人见过这个?

gst*_*ken 33

是的,ListBox的默认行为(或者更确切地说,默认ListBox模板中的ScrollViewer)奇怪 - 当我第一次遇到它时,我认为它一定是一个恶作剧.事实上,很难找到任何关于它的文档 - 但这里简要提到:

ManipulationBoundaryFeedback事件使应用程序或组件能够在对象到达边界时提供视觉反馈.例如,Window类处理ManipulationBoundaryFeedback事件,以使窗口在遇到其边缘时略微移动.

因此,解决它的方法是在ListBox上处理ManipulationBoundaryFeedback,并将Handled设置为true:

<ListBox ManipulationBoundaryFeedback="OnManipulationBoundaryFeedback">            
  // ...
</ListBox>
Run Code Online (Sandbox Code Playgroud)

代码隐藏:

private void OnManipulationBoundaryFeedback(object sender, ManipulationBoundaryFeedbackEventArgs e)
{
    e.Handled  = true;
}
Run Code Online (Sandbox Code Playgroud)

  • 这个答案在我的申请中帮助了我.一个补充:如果要禁用窗口中所有控件的边界反馈,则应将ManipulationBoundaryFeedback句柄放在窗口的第一个面板上,而不是放在窗口本身上. (2认同)