问题标签 [routedevents]
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.
wpf - WPF路由事件触发?
我有一个带有 3 个按钮的 WPF 表单,并在它们上面路由事件,命令在启动时绑定......
有效性启用和禁用按钮等。
表单有一个新或旧对象的实例,并且对数据进行验证
我的问题是事件一直在执行并且表单只是挂起导致验证代码确实轮询数据库等来检查....
如何在加载表单时让它们触发一次 mmm....
wpf - Silverlight 3 LoadedEvent 路由到 ViewModel
我的客户正试图挂钩到视图模型中的用户控件加载事件。基本上他们想知道控件加载事件何时在视图模型内触发。他们正在寻找一种无需 xaml 背后代码的方法。这是否可行。我正在研究是否可以将加载的事件路由到 xaml 中的视图模型。
c# - Button.MouseDown
我对 WPF 比较陌生。我试图了解 MouseDownEvent 和 PreviewMouseDownEvent 之间的区别。
我了解 WPF 事件策略,并且我了解 MouseDown 事件是一个冒泡事件,而 PreviewMouseDown 是一个隧道事件。
我也了解这些事件被触发的顺序 - 根据这个 MSDN 概述http://msdn.microsoft.com/en-us/library/ms742806.aspx#routing(那里有一个带有示例的图表)。
所以我尝试编写一些自己的代码,例如检查一下:
我对每个事件(预览和非预览)都有一个事件处理程序,我想看看发生了什么,哪个事件被抛出(我为每个事件显示了一个消息框)。
'MyButton' 用户控件只是扩展了基本 Button 并覆盖 OnMouseDown 和 OnPreviewMouseDown 以将 e.Handled 设置为 false:
(尝试了这个和没有这个)。
根据 MSDN 概述(在上面的链接中),如果我有 3 个元素,那么事件路由应如下所示:
根元素上的 PreviewMouseDown(隧道)。
中间元素 #1 上的 PreviewMouseDown(隧道)。
源元素 #2 上的 PreviewMouseDown(隧道)。
源元素 #2 上的 MouseDown(气泡)。
中间元素 #1 上的 MouseDown(气泡)。
根元素上的 MouseDown(气泡)。
所以我希望消息框按照上面的方式显示。由于某种原因 - 我不明白只有预览事件被抛出(根据 MSDN 所说的 Preview_B1=>Preview_B2=>Preview_B3)。我的期望是:Preview_B1=>Preview_B2=>Preview_B3=>NonPreview_B3=>NonPreview_B2=>NonPreview_B1。
但是根本没有抛出非预览事件。
所以基本上我不了解事件的路线,从 MSDN 概述中我了解到路线从根元素开始,向下(隧道)到源元素,然后备份(气泡)到根元素,但是这个不是在实践中发生的事情。
了解这些事件是如何运作的对我来说非常重要,我可能在这里错过了一些基本的东西,我们将不胜感激。
谢谢!!-吉利
wpf - WPF - 处理特定控件实例的父级中的 RoutedEvent
在我的用户控件中,我有几个文本框,例如 Textbox1、Textbox2。
在父级中,我只想处理从 Textbox1 引发的 KeyDown 事件,而不是所有 Textbox
我在父级中添加了一个处理程序
但当然这将处理我不想要的所有 KeyDown 事件。
我是否必须在 RoutedEventHandler 中添加一些条件逻辑来检查事件是从哪里引发的?
或者,还有更好的方法?
最好的方法是什么?
谢谢。
wpf - WPF:仅处理来自一个特定内容的冒泡事件
现在我要学习RoutedEvents了。我了解冒泡和隧道效应等等。但是我有一个小问题我不知道如何处理。
我在自己定义的 UserControl 中有一个 ItemsControl (继承 TabItem )。这个 itemsControl 可能是一个 ListBox 或一些尚未决定的选择器(取决于这个解决方案的最佳选择)。
现在,当一个项目被选中时(还不确定最好的选择方法是什么,也许是双击)我需要在包含我的 UserControl 的 TabControl 中捕获事件。值得庆幸的是,当我的 userControl 被放入 XAML 可视化树时,冒泡事件向上流动,事件可以到达 TabControl。但是,我在实现这一点时仍然存在一些问题。
1)假设我将其设置为 MouseDoubleClick 我不希望其他 DoubleClicks (例如在其他选项卡中或 ItemsControlItems 之外)。我想你总是可以检查事件的来源,以确保它是正确的,但我认为这不是正确的方式,它可能会自找麻烦。
2) 如果我将事件设置为 SelectionChanged 并将 ItemsControl 设置为 ListBox,我必须确保 ListBox 本身不会处理它,以便它可以到达 tabControl。我该怎么做?
3) 与 2) 相同,但 TabControl 本身就是一个选择器,所以它会引发它自己的 selectionchange 事件,不是吗。那将如何工作。处理程序会同时从列表框和 TabControl 中抓取吗?
4)不确定我应该使用什么 ItemsControl。如果我只是用它来双击项目然后处理事件不会 ListBox 太多。它具有许多不受欢迎的效果,例如选择等。定义您自己的 ItemsControl 或者使用 ListBox 并覆盖它的一些属性(如选择)会更好(如何做到这一点?)?
5) 事件的来源将是 ItemsContainer 但我不希望项目本身。有一种简单的方法可以访问它不是吗?
6)假设我放置了一个按钮,并且在 DataTemplate 中我不想通过按钮附加对象的 ID 并在处理按钮单击的位置捕获它以识别它是什么项目。是否有一个属性可以做到这一点,还是我必须自己定义它?
7) 这里最好的做法是创建我自己的活动吗?
您对这个问题的看法以及对这里最好采用哪种流程的评论是值得赞赏的。
编辑:决定按要求添加更多信息。
我的目标是什么;当我启动程序时,我有一个 TabControl,里面有 1 个选项卡。此选项卡与其他选项卡的不同之处在于它包含一个对象列表(CompanyModel)。这个列表就是我提到的 ItemsControl。当您按此列表中的一家公司时,会添加一个包含该公司信息的新选项卡。
我的解决方案是创建一个 TabItem 集合作为 TabControl 的源。然后我会在一个单独的 XAML 源文件中定义我的 2 种类型的 TabItems(不知道该怎么称呼它,基本上是添加新的用户控件)。一个是列表出现的初始位置,另一个接受 CompanyModel 作为构造函数参数并显示有关该信息的信息。
虽然我不喜欢单独定义公司列表 tabitem 的想法,但我无法在 tabcontrol 下定义它,因为我只能定义项目或来源,而不是两者。
我已经通过在 List DataTemplate 上放置一个按钮来尝试这个想法,该按钮将所选公司的 Id 冒泡到 TabControl,在那里处理它并使用 CompanyModel 添加一个新的 TabItem。这只是一个尝试它的解决方案,并且存在问题,例如如果我向 CompanyTabs 添加 anpther 按钮,我也会在 TabControl 中抓住它们。
因此,我的问题可以通过找到一种从原始 listTab 中冒泡事件的好方法来解决,或者如果我能够在与 TabControl 相同的位置定义选项卡。
我知道另一种解决方案是将列表与 TabControl 分开,但其他人想看看这是如何产生的,我想了解我将如何做到这一点。
wpf - 使 WPF 用户控件将单击事件标记为已处理
我有一个自定义控件,它将鼠标单击事件传播到可视树上,我想摆脱这种行为。有没有办法将路由事件(由按钮单击或其他鼠标事件引发)标记为从我的 UserControl 中的 xaml 处理。
wpf - WPF 命令绑定 - 如何访问事件处理程序
嗨,有什么方法可以选择 XAML 应该在哪里使用命令绑定事件处理程序?我在我的 cusotm 控件中添加了一些命令绑定,但是对 execute 和 can_execute 负责的函数不是直接在后面的代码中,而是在另一个类中。这个类是从 Canvas 派生的,我在 XAML 中创建了这个类的实例。
我以这种方式添加命令绑定
有什么办法吗?或者我必须将事件处理程序直接转移到代码隐藏?
wpf - 出现MessageBox时Wpf停止路由事件?
我PreviewMouseDown
在 TreeView 上进行了事件,以确定用户是否可以根据某些逻辑选择其他项目。如果当前项目数据发生变化,将出现询问用户是否要放弃更改的 MessageBox。如果用户按 YES ,我设置e.Handled = false;
为启用新选择。如果用户按否,我设置e.Handled = true;
取消新的选择。
问题是虽然我设置e.Handled = false
了,但是TreeView上没有发生事件停止并且没有选择事件。有人有解决方案吗?
提前致谢!
c# - 路由事件问题 - 在子元素之前点击根 UI 元素
我的路由事件在子元素之前点击了根 UI 元素。这是预期的吗?如何让路由事件首先命中子元素?
目标:如果在“自定义文本框”以外的任何地方输入文本,请将文本放入“默认文本框”
结果:Window_PreviewTextInput 在 custom_PreviewTextInput 之前被点击,即使我的光标焦点在“自定义文本框”上
我应该怎么做?
XAML
代码背后:
c# - Scrollviewer 阻塞事件
我今天要解决的问题是滚动查看器,它会阻止我的事件。所以 ..这里有一些 xaml:
所以事情是:在滚动查看器内部的网格上,我以编程方式添加问题 UserControl ...它附带一个带有单击事件的按钮。我的问题是我无法单击按钮..就像滚动查看器一样就像一个无形的盾牌来保护用户控件和按钮免受邪恶鼠标的攻击!
任何帮助表示赞赏!
编辑:(这是我的问题用户控件)
重新编辑...插入了错误的代码...这里有点困