首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C# UWP KeyDown event e.Handled奇怪的行为

C# UWP KeyDown事件的e.Handled奇怪的行为是指在处理键盘按键事件时,设置e.Handled属性为true时,预期的行为与实际行为不一致或出现异常情况。

在UWP应用程序中,KeyDown事件是用于响应用户按下键盘按键的事件。当按下键盘按键时,系统会触发该事件,并将相关信息传递给事件处理程序。而e.Handled属性用于指示是否已经处理了该事件,如果设置为true,则表示事件已经被处理,不再继续传递给其他控件或处理程序。

然而,有时候在设置e.Handled为true后,可能会出现一些奇怪的行为,例如按键事件没有被完全屏蔽,或者其他控件无法正常接收按键事件等。

这种奇怪的行为可能是由于以下原因导致的:

  1. 事件冒泡:在UWP中,按键事件会进行事件冒泡,即从触发事件的控件开始,逐级向上传递给父级控件。如果在某个父级控件的事件处理程序中设置了e.Handled为true,但是该父级控件的子控件仍然具有相同的事件处理程序,那么事件仍然会传递给子控件,导致奇怪的行为发生。
  2. 事件顺序:在UWP中,按键事件的处理顺序是由焦点控件决定的。如果焦点控件的事件处理程序中设置了e.Handled为true,但是焦点控件的父级控件或其他控件也具有相同的事件处理程序,那么事件仍然会传递给其他控件,导致奇怪的行为发生。

为了解决这个问题,可以尝试以下方法:

  1. 确保只有一个控件处理按键事件:在处理按键事件的控件中,设置e.Handled为true后,可以使用Focus方法将焦点转移到其他控件,以确保只有一个控件处理按键事件。
  2. 使用PreviewKeyDown事件:UWP中还提供了PreviewKeyDown事件,该事件在KeyDown事件之前触发。可以在PreviewKeyDown事件中设置e.Handled为true,以确保事件不会继续传递给其他控件。
  3. 检查事件处理程序的注册顺序:确保事件处理程序的注册顺序正确,避免出现事件冒泡或事件顺序导致的问题。

总结起来,C# UWP中的KeyDown事件的e.Handled奇怪的行为可能是由于事件冒泡或事件顺序导致的。通过确保只有一个控件处理按键事件,使用PreviewKeyDown事件,以及检查事件处理程序的注册顺序,可以解决这个问题。

请注意,以上答案是基于C# UWP开发的角度给出的解决方案,具体情况可能因应用程序的实际需求和代码实现而有所不同。对于更详细的解决方案和示例代码,建议参考微软官方文档或相关技术论坛。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

win10 uwp 捕获后台线程异常

本文告诉大家如何在 UWP 中捕获全局后台线程异常,在出现后台线程异常时,将会让 UWP 程序闪退,但是在退出之前还是可以执行自己代码 在 UWP 中,如果需要捕获前台线程,也就是 UI 线程异常...,可以参见 UWP全局异常处理 方法 在 App 构造函数添加 UnhandledException 事件,在事件方法里面通过参数 UnhandledExceptionEventArgs 可以设置当前这个异常是否被处理...,如设置为 true 那么就是被处理异常,此时应用不会闪退 public App() { this.InitializeComponent()...App_UnhandledException(object sender, Windows.UI.Xaml.UnhandledExceptionEventArgs e) { e.Handled...通过这个方法可以在软件退出前做日志记录 Application.UnhandledException Event (Windows.UI.Xaml) UWP全局异常处理

59410

模仿哔哩哔哩一键三连

去年在云之幻大佬 哔哩 项目里看到一键三连 UWP 实现,觉得挺有趣,这次参考它代码重新实现一次,最终成果如下: ?...因为长按这个需求破坏了点击这个行为,所以还是放弃 Button 选择 RangeBase 比较好。...EventHandler GestureRecognizerHolding; public event EventHandler...最后 很久没有认真写 UWP 博客了,我突然有了个大胆想法,在这个时间点,会不会就算我胡说八道都不会有人认真去验证我写内容?毕竟现在写 UWP 的人又不多。...不过放心,我对 UWP 是认真的,我保证我是个诚实男人。 不过这个一键三连功能做出来后,又好像,完全没机会用到嘛。难得都做出来了,就用来皮一下。

1K20

New UWP Community Toolkit - Carousel

概述 New UWP Community Toolkit  V2.2.0 版本发布日志中提到了 Carousel 调整,本篇我们结合代码详细讲解  Carousel 实现。...; Nuget: Microsoft.Toolkit.Uwp.UI.Controls; 开发过程 代码分析 先来看看 Carousel 类结构组成: Carousel.cs - Carousel 控件类...PointerWheelChanged += OnPointerWheelChanged; PointerReleased += CarouselControl_PointerReleased; KeyDown...internal event EventHandler Selected; private void OnIsSelectedChanged(DependencyObject sender, DependencyProperty...总结 到这里我们就把 UWP Community Toolkit 中 Carousel 控件源代码实现过程和简单调用示例讲解完成了,希望能对大家更好理解和使用这个控件有所帮助,让你图片列表控件更加炫酷灵动

1.4K60

给WPF一个HyperlinkButton

UWPHyperlinkButton下划线是代码里写死,大概是这样: if (VisualTreeHelper.GetChildrenCount(contentPresenter) == 1...我很讨厌这种代码里控制样式行为,UI和代码应该足够解耦。...UWP很多使用代码控制样式行为,通常宣称理由是为了性能,但Button是整个UI中最不需要性能部分,毕竟一个UI中不可能有几百个Button,就算有几百个HyperlinkButton,现代UI框架也不可能仅仅因为下划线就导致性能下降...所以我认为没必要在代码里控制下划线显示。 而无论Silverlight还是UWP,只要HyperlinkButtonContent不是纯文本就不能显示下划线,这应该也算一个功能缺陷。...(我记得在UWP中就没有这个问题,UWPContentPresenter自带透明背景) 4. 结语 HyperlinkButton明明很重要但WPF又不提供,幸好自己写起来也很简单。

1.1K20

使用Unity3D设计思想实现一个简单C#赛车游戏场景

最近看了看一个C#游戏开发公开课,在该公开课中使用面向对象思想与Unity3D游戏开发思想结合方式,对一个简单赛车游戏场景进行了实现。...在Unity3D最常见就是GameObject,而一个GameObject被实例化后确啥特性与行为都没有,只有当我们往其中拖拽了一个或多个组件(Component)后才会有行为。...可以从类图中看出,GameObject作为基本对象,没有实现具体表现和行为,而是提供了可供添加组件方法来实现让我们可以将组件拖拽到其上边,让组件来控制GameObject行为和展现。...Delegates.UpdateEventHandler Update; // KeyDown事件 public event Delegates.KeyDownEventHandler...KeyDown; // KeyUp事件 public event Delegates.KeyUpEventHandler KeyUp; // 执行Update

1.7K30

配置 legacyUnhandledExceptionPolicy 防止后台线程抛出异常让程序崩溃退出

如果补救成功,可以设置 e.Handled = true 来阻止异常继续让程序崩溃退出。但是,如果是后台线程抛出了异常呢?并没有 Dispatcher 可以用。所以我们就束手就擒让程序自己退出吗?...于是在异常发生之后,微软 Windows 会假设开发者并不知道如何应对以便让应用程序正常工作,就擅自将应用程序进程结束掉,以便防止应用程序自己内部产生奇怪状态和错误,避免对系统环境造成不可逆严重后果...于是允许开发者设置 e.Handled = true 来标记异常已被正确处理,程序可以不用退出了。...还有一个事件 Appdomain.CurrentDomain.UnhandledException,然而这个事件却并不允许开发者标记 e.Handled = true。...---- 参考资料 c# - How to prevent an exception in a background thread from terminating an application?

2.9K10

合体姿势不对HeaderedContentControl

UWP中几乎所有的表单控件都有Header属性,如TextBox、ComboBox等,这么看起来HeaderedContentControl更加重要了,但UWP反而没有提供HeaderedContentControl...,而且和TextBox等控件不同,UWP CommunityToolkit中Header属性都是string类型,真是任性。...微软第一次在UWP提供了HeaderedContentControl,有了一个Object类型Header属性,两件事本应该为开发者提供更多方便,但是,为什么会变成这样呢。...以前微软迟迟不肯提供HeaderedContentControl,现在一出手就是半成品,我很怀疑微软这样做是为了考验我们这些还在坚持UWP纯真开发者。 ? 4....这个功能我不是十分确定,至少目前看来这个行为是正确。 5. 结语 HeaderedContentControl 明明只是个很简单控件,明明只是个很简单控件,明明只是个很简单控件。

89230

配置 legacyUnhandledExceptionPolicy 防止后台线程抛出异常让程序崩溃退出

如果补救成功,可以设置 e.Handled = true 来阻止异常继续让程序崩溃退出。但是,如果是后台线程抛出了异常呢?并没有 Dispatcher 可以用。所以我们就束手就擒让程序自己退出吗?...于是在异常发生之后,微软 Windows 会假设开发者并不知道如何应对以便让应用程序正常工作,就擅自将应用程序进程结束掉,以便防止应用程序自己内部产生奇怪状态和错误,避免对系统环境造成不可逆严重后果...于是允许开发者设置 e.Handled = true 来标记异常已被正确处理,程序可以不用退出了。...还有一个事件 AppDomain.CurrentDomain.UnhandledException,然而这个事件却并不允许开发者标记 e.Handled = true。...---- 参考资料 c# - How to prevent an exception in a background thread from terminating an application?

32620

如何将GridViewEX升级到UWP(Universal Windows Platform)平台

因此创建UWP应用程序,首先需要删除所有ApplicationViewStates代码。可能会导致使用LayoutAwarePage部分会报错。因此我们需要做一些兼容性改变。...但是在UWP应用中,非常灵活,桌面应用可以在标题栏中添加返回按钮,在移动设备中不仅能使用标题栏中返回键,也可以使用物理返回键实现导航功能。UWP方法比较通用,且不需要编写自定义Xaml文件。...= null && this.Frame.CanGoBack) 36: { 37: e.Handled = true; 38: this.Frame.GoBack...显然UWPGridView 将所有非空项该属性都设置为None。因此,如果不重写OnDragOver 方法,Drop 事件就不会被触发。...UWP平台开发工具 ComponentOne Studio for UWP,是一套可以编写所有 UWP 平台应用控件集,包括表格、报表、图表、仪表盘、组织图、地图、PDF、Excel、Word、日程安排

2.8K80

俄罗斯方块

俄罗斯方块是一个很经典游戏,做一个UWP俄罗斯方块没有什么用,我想说是移植,把经典游戏移植到UWP。...我们之前有很多游戏,很多软件使用C或者C++之类来写,或者C#,其实我们可以把之前算法拿出来,转换为UWPC#,这时大家会说,界面。.../china_x01/p/5253556.html 看不懂他写,问了一位大神,他帮我改了UWP,最后我也看不懂,他写没有注释。...我想说不是写俄罗斯,而是把之前软件移植,我们可以把二维表,bool,表示为颜色,把颜色显示,我们有很多游戏都是可以这样,那么移植UWP简单,需要使用绑定,一个转换。 大神:可以直接绑定转换。...其实我是不喜欢直接绑定就转换,因为这样类很多,我们需要文件夹 Convert里面是转换类 我想说不是做一个俄罗斯方块,而是把之前数据保存二进制矩阵游戏移植到UWP思路。

2K10

让 WPF RadioButton 支持再次点击取消选中功能

(用户控件) 三、方法三:附加行为法 独立观察员 2022 年 01 月 16 日 零、前言 众所周知,RadioButton 是一种单选框,一般是放置好几个在同一面板中以组成一组;使用时,初始时可能一个都没被选中...,总之是很奇怪。...),所以需要换为 PreviewMouseDown 事件,并在处理完成后调用 “e.Handled = true;” 阻止事件继续传递: 现在,当 RadioButtonUncheck 控件通过点击由未选切换为选中时...,事件执行顺序为 PreviewMouseDown--Checked: 或: 而由选中切换为未选时,事件执行顺序为 PreviewMouseDown--Unchecked: 而如果没有 “e.Handled...关于附加行为,是通过附加属性来实现,可以参考我之前翻译文章《【翻译】WPF 中附加行为介绍 Introduction to Attached Behaviors in WPF》: 在一个元素上设置一个附加属性

2.1K30
领券