C# wpf 滚动查看器不像 Windows 商店应用程序那样工作

2024-01-09

我目前正在开发一个使用 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(使用前将#替换为@)

C# wpf 滚动查看器不像 Windows 商店应用程序那样工作 的相关文章

随机推荐

  • 根据异常类型调用ContainerStoppingErrorHandler

    我使用的是 spring kafka 版本 2 2 4 Release 和 Kafka 版本 2 11 我在用容器停止错误处理程序作为我的错误处理程序 每当出现异常时 就会调用此方法并停止容器 现在 我需要根据异常类型停止容器 如果发生某些
  • 如何检测特定区域的触摸

    目前我看到触摸事件将向我显示发生触摸的 UIView 但是 如果我需要检测某些非矩形形状 例如圆形 的触摸该怎么办 我该如何去做这样的事情呢 基本上 只有当用户触摸不可见的圆形区域内的某处时 我才想做一些事情 感谢任何帮助 指导 TIA 你
  • 了解 PHP/Laravel 中的构造函数、$this 关键字和控制器类

    我知道以前已经对此进行过介绍 但我正在努力解决如何将其应用到我的代码中 我正在 Laravel 中开发一个 PHP 应用程序 但希望使我的代码更加模块化和可测试 这意味着将我的逻辑从我的重型控制器中分离出来 并将它们分离到单独的文件中 并从
  • WPF 中的下划线标签,使用样式

    我有以下风格
  • JavaScript 和非常长的字符串

    我在使用以下代码时遇到问题 function showTableData var tableArray var x 0 var theHTML for i 0 i lt 7032 i if x 0 theHTML tr th class s
  • 链接到不带 .lib 的 .dll 文件

    我需要将一些Delphi代码重写为C 并且我们需要链接到动态库TMLComm2004 dll 事实证明我们没有 lib文件 因此我们决定使用以下命令行生成它 dumpbin EXPORTS C Users fayard Desktop TM
  • 如何从 Java 验证 HTML?

    从 Java 验证 HTML 的快速而简单的方法是什么 我正在寻找一个开源 PD 类 或一组类 来描述 100 多个 HTML 标签的各种属性 例如 标签是可选的吗 空的 省略其结束标签是否合法 该标签还可以包含哪些其他标签 如果有 哪些属
  • 所有 JPEG 文件都是 JFIF 吗?

    Active Directory 可以按照 JPEG 文件交换格式 JFIF 存储图像jpegPhoto 属性定义 http msdn microsoft com en us library ms676813 VS 85 aspx 我想使用
  • 如何从 Catch 块返回错误消息。现在返回空

    下面给出了我的 ApiKey 验证示例代码 我使用的是 MVC4 Web api RC public class ApiKeyFilter ActionFilterAttribute public override void OnActio
  • 如何验证关联的模型ID?

    我有一个学生和一个课程模型 学生属于课程 课程有很多学生 class Student lt ActiveRecord Base attr accessible course id name password status studentID
  • Rails:使用现有数据更改现有列的数据类型的影响

    我可能在错误的地方问这个问题 所以如果我是这样的话 请放轻松并为我指出正确的方向 我无法理解使用 Rails 中的现有数据更改现有表中现有列的数据类型将如何影响我正在开发的任何应用程序 如果我有一个名为的布尔列football The fo
  • 通过用户 ID 查询 Google Analytics

    有没有办法使用查询结果核心报告 API v3 https developers google com analytics devguides reporting core v3 并通过以下方式过滤这些结果User ID https deve
  • 在哪里可以找到 Microsoft 应用程序的应用程序 ID URI?

    我正在尝试以我注册的应用程序身份登录 并授予以下权限 Azure 门户 gt 应用程序注册 gt 应用程序注册 预览 gt 我的应用程序名称 API 权限 根据本文档 https learn microsoft com en us grap
  • 如何在 Swift 3.0 中将字符串转换为 UIColor?

    我正在尝试将使用预定义颜色列表的现有程序从 Objective C 转换为 Swift 原始代码使用Selector来提取一个UIColor基于它的名称表示为NSString define UIColorFromRGB rgbValue U
  • 正则表达式使 3 个单词彼此靠近。如何获取他们的上下文?

    我有以下字符串 text I love jam I like all other kinds of confectionery as well cakes and croissants and things Bagels too Carbs
  • 如何执行另一个php脚本?

    如何执行另一个 php 脚本 我想从我的 php 文件执行 3 个 php 脚本 而不需要等待 3 个脚本完成 换句话说 这 3 个 php 文件需要同时执行 并行 而不是一个接一个 顺序 执行 这 3 个脚本位于我的主 php 文件 脚本
  • 使用 PANDAS 在数据帧列中查找多个精确的字符串匹配

    我有数百万个条目数据集 其中包含人类输入的观察结果 以指示某些 操作 结果 尝试创建一些类别 我需要查看此列并提取某些确切的内容 最常用的表达方式 它们可以出现在字符串的开头 结尾或中间 并且可以缩写也可以不缩写 我构建了以下示例 data
  • Netbeans 不会自动缩进 (Java)

    我有一个大学项目 我必须编写一个 Java 应用程序 由于我们使用 Netbeans 作为 IDE 来学习 Java 因此我决定使用此 IDE 来编写应用程序代码 我以前的电脑上从未遇到过这个错误 现在 当我在编写函数或任何其他块后打开 时
  • 加载脚本时何时使用异步与延迟?

    所以我最近了解到 将 js 放在 DOM 底部已经过时了 我应该再次将它们放在具有 async 和 defer 属性 伟大的 但我对根据优先级应该使用哪个感到有点困惑 所以我有 jquery jquery 插件不会立即影响外观 页 对页面外
  • C# wpf 滚动查看器不像 Windows 商店应用程序那样工作

    我目前正在开发一个使用 WPF 的应用程序 我不得不注意到 ScrollViewer 功能与 Windows 应用商店应用程序变体相比的差异 当我位于屏幕边缘和 ScrollViewer 边缘时 我想要滑动以便远离边缘 我看到 Window