问题标签 [routed-events]
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 - ControlTemplate 上的事件?
有谁知道为什么我不能在控件模板上设置事件?
例如,以下代码行将无法编译。它对控件模板中的任何事件执行此操作。
我正在使用 MVVM 设计模式,这里的控件位于添加到应用程序的 MergedDictionaries 的 ResourceDictionary 中。
wpf - 直接路由事件问题
我和一位同事正在谈论路由事件,我们想出了一些没有多大意义的事情。首先,事件的目的是什么Direct
,为什么两者都是直接事件而不是冒泡和隧道LeftMouseButtonDown
?PreviewLeftMouseButtonDown
根据文档,LeftMouseButtonDown
(和预览)事件似乎表现为冒泡和隧道事件,除了在这些事件遍历树时引发和重新引发事件。由于直接事件只能由事件源处理,因此任何人UIElement
都可以处理直接事件,因为每个人都在引发事件,因此也是源。(除非重新加注事件与加注不同?)。为什么这些事件不像许多其他类似事件那样形成隧道和冒泡?
我的同事和我都想不出一个用例,在这个用例中,我们将使用直接策略创建自定义事件(尽管我们想出了一些用于隧道和冒泡),但是LeftMouseButtonDown
,这是最常见的事件之一(如果不是最常见)正在使用这种策略。
有人对此背后的理性有任何想法吗?
谢谢!
wpf - WPF 中的路由事件 - 使用操作委托
我正在开发一个用户控件,并希望使用路由事件。我注意到提供了两个委托 - RoutedEventHandler 和 RoutedPropertyChangedEventHandler。第一个不传递任何信息,第二个接受属性更改的旧值和新值。但是,我只需要传递一条信息,所以我想要一个 Action 委托的等价物。有没有提供什么?我可以使用 Action 委托吗?
wpf - WPF 中的事件路由
我已经实施了一个UserControl
. 然后我想处理一个最初由Window
(键盘按下)处理的事件。路由另一个组件(组件树中较高)捕获的事件的最佳方法是什么?
提前感谢您的回复和提示!
干杯
wpf - 在非 UIElement 类中引发 RoutedEvents
似乎 routedevents 的全部力量都是针对 UI 开发的。意思是问,是否可以从根本不扩展UIElement
或 UserControl 类的类中引发路由事件?例如:我创建了一个 State 类,我对一些数据(主要是绘图和对象)执行了几项更改,我希望通知主 UI,以便它可以更新其Adorner
s 并重新绘制可视元素。
我认为最好也将这个 State 类与 UI 解耦,而不是创建一个事件处理程序,如果它想要服务这个事件,主 UI 应该直接附加到该事件处理程序。
有没有办法实现这一点,还是我完全关闭了?
wpf - WPF - 理解 RoutedEvents
嗨,我正在学习 WPF,目前我正在阅读有关 RoutedEvents 的信息。在“C#中的Pro WPF”一书中,我在下面介绍了一些代码片段
关键是我看不到路由事件的区别/优势(通过这个例子判断)。在常规的 C# 中,我会做同样的事情 - 为表单上的每个元素添加处理程序(就像在此处完成的那样)。
起初,当我阅读有关路由事件的信息时,它似乎是这样工作的。我为我的表单/控件/窗口上的所有可视元素的父级添加事件处理程序。如果我单击子项,则会引发 mousedown 事件并通过可视化树向下传播。如果事件到达网格,则调用事件处理程序。但是我错了,或者我做错了什么。有人可以解释一下正常事件和路由事件之间的区别吗
编辑插入代码时发生了一些奇怪的事情。插入整个代码片段我只得到标签
wpf - 使用 TreeView 对选定项目更改做出反应的首选方法是什么?
选择 TreeViewItem 后更新其他控件的首选方法是什么?
目前我的 TreeView 中有以下结构
它使用 MVVM 模式,两种树视图项类型中的每一种都由特定的视图模型(DataStoreTypeViewModel
和DataStoreEntryViewModel
)填充。
当用户选择其中一个节点( aDataStoreType
或 a DataStoreEntry
)时,我需要能够使用基于选择的信息填充列表控件。所以列表控件需要能够显示两组不同的数据。
我读过一些关于RoutedEvents
,但不确定这是否是要走的路......
谢谢基隆
_
silverlight - 当父控件获得/失去焦点时隐藏/显示子控件
我正在创建一个文本编辑控件,其中包含一个 RichTextArea 和一个用于格式化的工具栏。我希望工具栏仅在控件具有焦点时可见。然而,我发现这在 Silverlight 中很难实现,因为 Silverlight 的焦点 API 非常有限。
控件的结构如下:
初始刺
起初我尝试了明显的,我覆盖了父 UserControlOnGotFocus
并适当地OnLostFocus
隐藏/显示_formattingToolbar
。这不起作用,因为如果子控件获得焦点,Silverlight 会认为父控件失去焦点。最终结果是试图单击工具栏导致它消失。
讨厌的解决方案
到目前为止,我发现的唯一解决方案是将事件处理程序连接到每个子控件和父 UserControl 上的GotFocus
和事件。LostFocus
事件处理程序将调用FocusManager.GetFocusedElement()
,如果发现返回的元素是我的 UserControl 的子元素,则保持_formattingToolbar
可见,否则将其折叠。我相信这会奏效,但它很丑陋。
这个想法也有可能是错误的,因为 GotFocus/LostFocus 是异步触发的,GetFocusedElement()
而是同步确定的。会不会有竞争条件导致我的想法失败?
有人知道更好的解决方案吗?
c# - WPF中的冒泡事件?简单的问题
这可能是一个非常容易解决的问题,但我在处理事件方面缺乏经验,所以我只是想问一下。
我有一个 ListBox,里面有 ListBoxItems。这些 ListBoxItem 将绑定到数据源,因此它们会发生变化。当对这些 ListBoxItem 中的任何一个执行 MouseDown 操作时,我需要引发一个 MouseDown 事件(因为我正在执行拖放操作)。由于值在变化,我不能期望在 XAML 中将事件连接在一起,如下所示
如果我有静态值,这将很容易,但由于 ListBox 中的值会改变,我更愿意编写以下 XAML
然后,当 ListBoxItem 被选中时,它会将事件冒泡到这个 MouseDownEventName,那时我可以抓取 ListBox1.SelectedItem,问题是,我现在正在尝试这个,但它不起作用。我有以下代码来处理 MouseDown,它目前仅重写标签内容以表示该项目已被 MouseDown'ed。