问题标签 [event-routing]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1015 浏览

silverlight - Silverlight 页面未捕获输入事件

我一直在尝试在我的 Silverlight 应用程序中处理 UserControl(页面)的 KeyDown 事件,但 Silverlight 用户输入功能部分似乎存在一些奇怪的行为。在任何情况下都不会引发该事件。我什至尝试将事件处理程序附加到 UserControl 中的每个容器控件,但仍然没有运气。确实,Silverlight 用户输入“事件路由”系统很新颖,对我来说似乎很奇怪,所以也许这只是我的一个误解,尽管我对如何进行相当无知。

以下代码是我正在测试的特定页面的模板。

在 WPF 中,此类问题的明显解决方案是处理 PreviewKeyDown 事件,但不幸的是,这在 Silverlight 2 中不可用。欢迎任何想法(以及为什么 Silverlight 事件路由的行为如此的简短解释)。

0 投票
5 回答
21163 浏览

c# - 正如 MSDN 文章所述,为什么按钮单击事件“冒泡视觉树”到 StackPanel?

在 MSDN 文章Understanding Routed Events and Commands In WPF中,它指出

一个事件将从源元素向上冒泡(传播)到可视化树,直到它被处理或到达根元素。

但是,在此示例中,当您单击按钮时,它不会“冒泡视觉树”以由父 StackPanel 事件处理,即单击按钮不会触发任何事件。

为什么不?如果不是这个,他们所说的“冒泡”是什么意思?

XAML:

代码隐藏:

0 投票
3 回答
4441 浏览

wpf - 如何防止 InvokeCommandAction 将事件传播到父元素?

我意识到,当使用与 EventTrigger 关联的 InvokeCommandAcction 时,原始事件仍在路由到父元素,直到它被处理。好吧,我想这是一种预期的行为。但我的问题是如何将事件标记为已处理,以便它不会在整个 UI 树中传播?

实际上,当您在命令中处理此事件时,所有内容都将在此命令中处理,因此不需要传播。在我发现的一个极端情况下,它会导致一些不需要的行为。例如,当用户双击一个元素(MouseDoubleClick 事件)时,我会打开一个新窗口。问题是新窗口打开,然后主窗口回到新窗口的前面,因为 MouseDoubleClick 事件刚刚到达 UI 树中的顶部元素。想要的行为是将新窗口保持在前面,但随着 InvokeCommandAction 让事件向上传播,主窗口收回焦点......

我可以做的是改用 CallMethodAction 资产,但由于我处于 MVVM 场景中,我不想在我的代码中使用 UI 事件参数。即使这会让我隐含地将事件标记为已处理并解决问题。

0 投票
2 回答
2558 浏览

c# - 防止KeyDown事件从TextBox冒泡到WPF中的MainWindow

我有一个包含文本框控件的程序。用户可以在此控件中输入文本。用户还可以按下某些键来触发其他操作(这在 MainWindow 上处理)。我有示例 XAML 和 C# 代码来演示我的设置。

XAML

C#

正如您可能已经意识到的那样,在这个程序的情况下,如果我开始输入第一个TextBox,第二个将使用命中计数进行更新。OnKeyDown这是一个不受欢迎的结果,因为在处理 MainWindow 的方法时,我可能希望触发某些操作。

因此,我的问题是:是否可以防止在OnKeyDownMainWindow 上调用该方法,同时仍允许在文本框中输入文本?我知道这种e.Handled = true方法,但在这种情况下,如果KeyDown发生这种情况TextBox会阻止输入文本。如果这是不可能的,我将不得不找到其他方法来处理这一切。

提前致谢。

编辑

我刚刚找到了一种解决这个问题的适度的方法。如果我改为处理 MainWindow 的OnTextInput方法,那么我想要的结果将得到处理,因为 will 的TextInput事件TextBox已被处理。下面是我使用的代码示例:

0 投票
1 回答
1940 浏览

c# - 从 MainWindow 的 PreviewKeyDown 将 WPF 键盘事件路由到子 DataGrid

我有一个带有几个单行文本框和一个 DataGrid 的窗口(Windows8 上的 .Net 4.5)。

我想将导航事件(Up/Down/PgUp/PgDn 等)路由到网格,无论哪个控件具有焦点。

我尝试在主窗口中覆盖 PreviewKeyDown,如下所示:

问题是我得到了 StackOverflowException 因为事件不断反映到Window_PreviewKeyDown.

我尝试了以下 [ugly] 解决方法:

我宁愿用 替换if ( bEventRaised )if ( sender == myDataGrid )但是,发件人始终是主窗口。

尽管如此,这让我更进一步。我现在可以看到键盘事件到达myDataGrid.PreviewKeyDown,但仍然 - 该事件不会在 myDataGrid 中触发。

我很想得到一些帮助来理解我做错了什么,或者是否有不同的方式将事件路由到子 DataGrid。

谢谢。

0 投票
1 回答
182 浏览

wpf - ListBox ItemTemplate 中的按钮未选择项目 wpf mvvm

嗨,我有与此处相同的问题ListBox ItemTemplate 中的按钮未选择项目 而且我知道我的按钮看不到所选项目的原因,这是因为当 MouseDown 和单击时调用按钮时调用了列表框。但我不知道如何修复它 XAML

C#