Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# wpf中的路由事件_C#_Wpf_Routed Events - Fatal编程技术网

C# wpf中的路由事件

C# wpf中的路由事件,c#,wpf,routed-events,C#,Wpf,Routed Events,一个非常众所周知的事实是,路由事件只在祖先中上下传播,而不是通过所有元素 但一个同样众所周知的事实是,事件处理程序可以连接到两个不同控件的公共父控件中 我的问题是如何,请给我一些建议 我有一个XAML,看起来像 <Grid Name="MainGrid"> <Listbox Name="lb1"/> <Grid Name="InnerGrid"> <Listbox Name="lb2"/> </Grid&

一个非常众所周知的事实是,路由事件只在祖先中上下传播,而不是通过所有元素

但一个同样众所周知的事实是,事件处理程序可以连接到两个不同控件的公共父控件中

我的问题是如何,请给我一些建议

我有一个XAML,看起来像

<Grid Name="MainGrid">
    <Listbox Name="lb1"/>
    <Grid Name="InnerGrid">
       <Listbox Name="lb2"/>
    </Grid>
</Grid>

在“lb1”上定义的鼠标事件处理程序将不会被触发,因为它会在“InnerGrid”下被“掩埋”。我的问题是,如何在“MainGrid”或“lb1”上定义的事件处理程序被触发的其他地方编写一些代码。或者可能是实现这一点的其他技术


非常感谢。

我不确定您到底在问什么,但似乎您希望能够接到已处理事件的电话

试试这个:

在构造函数中
InitializeComponent()之后的代码隐藏中,调用

this.AddHandler(RoutedEvent, Delegate, bool);

传入事件(
MouseDown
或诸如此类)、要调用的委托(类似于
lb1\u MouseDown
),然后传递
true
,表示您希望为已处理的事件调用。

这可能是一个愚蠢的问题,但为什么您首先要将lb1“掩埋”在内部网格下你的问题绝对有道理。我上面问的问题有点像把长话短说。基本上,1024X768的屏幕不太适合使用,并且有很多这种形式的控件。:)