我试图让路由事件与将手动触发这些事件的子控件一起使用,它们将冒泡并在主网格级别进行处理。我基本上想做这样的事情:
<Grid Name="Root" WpfApplication5:SpecialEvent.Tap="Catcher_Tap">
<Grid.RowDefinitions>
<RowDefinition Height="40" />
<RowDefinition Height="40" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<WpfApplication5:UserControl2 Grid.Row="0" x:Name="Catcher" />
<WpfApplication5:UserControl1 Grid.Row="1" />
<Frame Grid.Row="2" Source="Page1.xaml" />
</Grid>
但是当我运行我的示例时,我在演示框架中得到一个空引用,应用程序永远不会初始化,它在尝试加载/初始化 XAML (InitializeComponent()) 时失败。这是包含该事件的小文件:
public class SpecialEvent
{
public static readonly RoutedEvent TapEvent = EventManager.RegisterRoutedEvent(
"Tap", RoutingStrategy.Direct, typeof(RoutedEventHandler), typeof(UserControl1));
// Provide CLR accessors for the event
public event RoutedEventHandler Tap;
}
我基本上想复制 ButtonBase.Click 如何允许父母为他们的孩子订阅任何按钮 click() 方法的行为。但是,这似乎不适用于 ButtonBase.Click()。也就是说,当我将自定义切换WpfApplication5:SpecialEvent.Tap="Catcher_Tap"
为ButtonBase.Click="Catcher_Tap"
它时,它会起作用。任何想法为什么?ButtonBase 在做什么而我没有做什么?