我目前正在开发一个使用 WPF 的应用程序。
我不得不注意到 ScrollViewer 功能与 Windows 应用商店应用程序变体相比的差异。
当我位于屏幕边缘和 ScrollViewer 边缘时,我想要滑动以便远离边缘。我看到 Windows 桌面或菜单栏(位于屏幕底部时)。
有没有解决方案可以防止这种滚动行为发生?当你滚动到屏幕边缘然后又被撞回来并看到下面的一些 Windows 平台时,这是相当烦人的(而且很难看!)。
此行为已在 Windows 应用商店应用 ScrollViewer 中修复。
我尝试覆盖ScrollChanged
并检查是否有horizontalOffset == 0 && horizontalChange < 0
如果是这种情况则返回。但这个检查似乎不起作用(从那以后可能已经太晚了)。
我似乎找不到 Windows 应用商店应用程序解决此问题的方法。
也许你们有一个想法?
EDIT:.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 应用程序中不存在此行为的原因。
EDIT:这种效果称为操纵边界反馈。当操作事件超出其容器的限制时,它就会触发。您可以禁用它覆盖OnManipulationBoundaryFeedback(ManipulationBoundaryFeedbackEventArgs)
受影响的方法UIElement
像这样:
class NoTouchFeedbackWindow : Window
{
protected override void OnManipulationBoundaryFeedback(ManipulationBoundaryFeedbackEventArgs e)
{
e.Handled = true;
}
}
这也可以直接在 ScrollViewer 或链上的任何控件上完成。
您可以在以下位置找到有关此行为的更多信息:
- http://msdn.microsoft.com/en-us/library/dd988680(v=vs.110).aspx http://msdn.microsoft.com/en-us/library/dd988680(v=vs.110).aspx
- http://msdn.microsoft.com/en-us/library/system.windows.uielement.onmanipulationboundaryfeedback(v=vs.110).aspx http://msdn.microsoft.com/en-us/library/system.windows.uielement.onmanipulationboundaryfeedback(v=vs.110).aspx
希望这能解决您的问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)