我目前正在使用WPF开发应用程序。而且,我不禁注意到与Windows Store App变体相比ScrollViewer功能的不同。
当我位于屏幕的边缘和ScrollViewer的边缘时,我想要滑动,以便远离边缘。我看到Windows桌面或菜单栏(在屏幕底部时)。是否有解决方案来防止这种滚动行为发生?当您滚动到屏幕边缘然后撞回并看到下面的一些Windows平台时,这很烦人(而且很丑!)。Windows Store App ScrollViewer中已修复此行为。
我尝试覆盖ScrollChanged
并检查fehorizontalOffset == 0 && horizontalChange < 0
并在这种情况下返回。但是此检查似乎不起作用(因为那样可能已经太迟了)。而且我似乎找不到Windows Store Apps解决此问题的方式。
也许你们有一个主意?
编辑: .NET 4.5.1中WPF项目的复制
这段XAML在WPF中重新造成了我的问题。但是,在Windows Store App中,该问题似乎不存在。
当滚动到应用程序的边缘和/或在应用程序的边缘上时,如何防止这种行为?
<Window x:Class="WpfApplication1.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" ResizeMode="NoResize" WindowState="Maximized" WindowStyle="None">
<Grid>
<ScrollViewer HorizontalScrollBarVisibility="Hidden" VerticalScrollBarVisibility="Hidden" PanningMode="Both">
<Rectangle Height="2500" Stroke="Black" Width="3500" HorizontalAlignment="Left" VerticalAlignment="Top">
<Rectangle.Fill>
<LinearGradientBrush EndPoint="0.5,1" StartPoint="0,0.5">
<GradientStop Color="#FF00FF68" Offset="0"/>
<GradientStop Color="Red" Offset="1"/>
<GradientStop Color="#FF95FF00" Offset="0.506"/>
</LinearGradientBrush>
</Rectangle.Fill>
</Rectangle>
</ScrollViewer>
</Grid>
</Window>
这是Windows 8与滚动相关的默认行为。到达可滚动视图的边缘时,整个应用程序将“反弹”。这在每种情况下都会发生,并且是系统动画的一部分。例如,在很长的文件夹列表中,您可以在Windows资源管理器中看到它。仅在通过触摸滚动时(如果我没有记错的话)在非全屏应用程序上会发生这种情况。我目前无权使用Windows 8计算机来测试此声明, 并且很可能没有办法禁用此行为 。
现代环境是一个完全独立的应用程序环境,根本不以相同的方式处理触摸手势。这就是为什么WinRT应用程序中不存在此行为的原因。
编辑:此效果称为操纵边界反馈。当操纵事件超出其容器的限制时,它将触发。您可以禁用它来覆盖OnManipulationBoundaryFeedback(ManipulationBoundaryFeedbackEventArgs)
受影响的方法,UIElement
如下所示:
class NoTouchFeedbackWindow : Window
{
protected override void OnManipulationBoundaryFeedback(ManipulationBoundaryFeedbackEventArgs e)
{
e.Handled = true;
}
}
这也可以直接在您的ScrollViewer上执行,也可以在链上的任何控件上完成。
您可以在以下位置找到有关此行为的更多信息:
希望这可以解决您的问题。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句