xaml Scrollviewer – 禁用整个窗口的滚动/橡皮筋效果/回弹效果/反弹

当我在列表框中使用滚动查看器时,当我通过触摸滚动到达列表框的末端时,整个窗口会弹起。 当我使用我的鼠标滚轮时,不会出现此行为。 我怎样才能禁用这种过度滚动/橡皮筋效应/回弹效应/弹跳效果。

我正在使用Windows 8计算机上的.NET Framework 4.5。

您可以在此video中看到反弹效果: http : //www.vidup.de/v/gQ2pI/

这是我的示例代码:

<Window x:Class="style_test_for_scrollviewer.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="350" Width="525"> <Grid> <ListBox Width="200"> <WrapPanel Width="200" ScrollViewer.PanningMode="VerticalOnly" ScrollViewer.CanContentScroll="True" ScrollViewer.VerticalScrollBarVisibility="Visible"> <Button Height="200" Width="200"></Button> <Button Height="200" Width="200"></Button> <Button Height="200" Width="200"></Button> <Button Height="200" Width="200"></Button> <Button Height="200" Width="200"></Button> <Button Height="200" Width="200"></Button> <Button Height="200" Width="200"></Button> <Button Height="200" Width="200"></Button> <Button Height="200" Width="200"></Button> <Button Height="200" Width="200"></Button> <Button Height="200" Width="200"></Button> <Button Height="200" Width="200"></Button> </WrapPanel> </ListBox> </Grid> </Window> 

您可以通过重写OnManipulationBoundaryFeedback方法来删除此行为:

 public class FixedListBox : ListBox { protected override void OnManipulationBoundaryFeedback(ManipulationBoundaryFeedbackEventArgs e) { e.Handled = true; } } 

另一种解决方案是将以下处理程序添加到ManipulationBoundaryFeedback事件(直接在ListBox上或通过样式):

 <ListBox ManipulationBoundaryFeedback="OnManipulationBoundaryFeedback"/> 

要么:

 <Style TargetType="{x:Type ListBox}"> <EventSetter Event="ManipulationBoundaryFeedback" Handler="OnManipulationBoundaryFeedback"/> </Style> 

有了下面的代码:

 protected void OnManipulationBoundaryFeedback(object sender, ManipulationBoundaryFeedbackEventArgs e) { e.Handled = true; } 

这些方法也适用于ScrollViewer。