我想在我的WPF应用程序中实现一个路由到用户控件的路由命令。
我的理解是路由命令(如路由事件)可以在可视树中上下传播以找到适当的处理程序,但是我找不到如何执行此操作的简单示例。
创建在定义它的同一可视树节点内处理的路由命令没有问题。
请有人提供一个简单的解释或示例,演示如何连接路由命令,以便在可视树下方的节点中处理。
更新: 我的用例是我有一些功能,我想在一个标签项中执行,实现为用户控件,我想通过键盘输入触发它。因此,我需要在主窗口中处理键盘输入,然后将命令传送到我的特定选项卡项。
由于
答案 0 :(得分:0)
对于路由命令,我认为你不能因为与CanExecute紧密耦合而需要预览。
在WPF中,请考虑将EventManager用于路由事件。
在那里,您可以将路由定义为Bubbling,Tunneling或Direct。
示例:强>
public static readonly RoutedEvent ButtonColorChangedEvent = EventManager.RegisterRoutedEvent("ButtonColorChanged",RoutingStrategy.Bubble,typeof(DependencyPropertyChangedEventHandler),typeof(Shirt));
public event RoutedEventHandler ButtonColorChanged {
add {AddHandler(ButtonColorChangedEvent,value);}
remove { RemoveHandler(ButtonColorChangedEvent, value); }
}
答案 1 :(得分:0)
路由从根到焦点元素隧道开始 如果没有指定cmd目标,则从焦点elmt冒泡到根目录。
经过挖掘和搜索,我得到了解决方案: 你必须设置“隧道停止和冒泡开始元素” 自己通过“CommandTarget”
public partial class Grid_Dienste : UserControl {
public static Grid_Dienste current { get; set; }
public Grid_Dienste()
{
current = this;
...
// this is the prerequsite, works on singeltons
在上层节点/元素的xaml中,您可以引用“当前”
Command = "{Binding cmdLoad}"
CommandTarget = "{x:Static local:Grid_Dienste.current}"
/>所以结论:隧道效应并不意味着从焦点到最底层 视觉,但从根本到焦点。