Wpf 为什么自定义RouteEvent没有在我的xaml中处理

Wpf 为什么自定义RouteEvent没有在我的xaml中处理,wpf,xaml,Wpf,Xaml,我有一个WPF主窗口,其中有我自己的RoutedEvent,当按下Enter键时会弹出该窗口 namespace ZK16 { public partial class MainWindow : Window { public static readonly RoutedEvent CustomEvent = EventManager.RegisterRoutedEvent( "Custom", RoutingStrategy.Bubble, typeof(Routed

我有一个WPF主窗口,其中有我自己的RoutedEvent,当按下Enter键时会弹出该窗口

namespace ZK16
{
public partial class MainWindow : Window
{

    public static readonly RoutedEvent CustomEvent = EventManager.RegisterRoutedEvent(
        "Custom", RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(MainWindow));

    public event RoutedEventHandler Custom
    {
        add { AddHandler(CustomEvent, value); }
        remove { RemoveHandler(CustomEvent, value); }
    }

    void RaiseCustomEvent()
    {
        Debug.WriteLine("RaiseCustomEvent");
        RoutedEventArgs newEventArgs = new RoutedEventArgs(MainWindow.CustomEvent);
        RaiseEvent(newEventArgs);
    }

    public MainWindow()
    {
        InitializeComponent();
        this.AddHandler(MainWindow.CustomEvent, new RoutedEventHandler(MyCustomHandler));
    }

    private void MyCustomHandler(object sender, RoutedEventArgs e)
    {
        Debug.WriteLine("In Eventhandler...");
    }

    private void Window_PreviewKeyDown(object sender, KeyEventArgs e)
    {
        if (e.Key == Key.Enter)
            RaiseCustomEvent();
    }
在XAML中,我添加了一个带有EventTrigger的标签

<Window x:Class="ZK16.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:ZK16"
    Title="MainWindow"
    PreviewKeyDown="Window_PreviewKeyDown"
    >
<Grid>
    <Label Content="Hello World">
        <Label.Triggers>
            <EventTrigger RoutedEvent="local:MainWindow.Custom">
                <BeginStoryboard>
                    <Storyboard Duration="00:00:1">
                        <DoubleAnimation From="6" To="25" Storyboard.TargetProperty="FontSize"/>
                    </Storyboard>
                </BeginStoryboard>
            </EventTrigger>
        </Label.Triggers>
    </Label>
</Grid>
</Window>

有谁能告诉我,出了什么问题吗?

我想对路由事件有一点了解

该条规定如下:

冒泡:调用事件源上的事件处理程序。然后,路由事件路由到连续的父元素,直到到达元素树根

隧道:最初,调用元素树根上的事件处理程序
。然后,路由事件沿着路由通过连续的子元素向作为路由事件源的节点元素(引发路由事件的元素)移动路由

在你的情况下,你有一个冒泡事件。您可以在
主窗口
(源代码)中提升它,使其从该元素开始向上移动。主窗口上方没有任何内容,因此它会停在那里

如果将事件更改为隧道事件,则会发生这种情况。您从
MainWindow
(源)将其提升,因此事件开始从父级传递到源,同样,没有任何内容高于
MainWindow
,结果相同

现在,如果在XAML中执行以下操作:

<Label x:Name="MyLabel" Content="Hello World">
在冒泡事件的情况下,路线如下:

标签
(源)->
网格
->
主窗口

在隧道事件中:

main窗口
->
网格
->
标签
(来源)


这个人也有同样的问题。

我认为对于路由事件是什么有一点了解

该条规定如下:

冒泡:调用事件源上的事件处理程序。然后,路由事件路由到连续的父元素,直到到达元素树根

隧道:最初,调用元素树根上的事件处理程序
。然后,路由事件沿着路由通过连续的子元素向作为路由事件源的节点元素(引发路由事件的元素)移动路由

在你的情况下,你有一个冒泡事件。您可以在
主窗口
(源代码)中提升它,使其从该元素开始向上移动。主窗口上方没有任何内容,因此它会停在那里

如果将事件更改为隧道事件,则会发生这种情况。您从
MainWindow
(源)将其提升,因此事件开始从父级传递到源,同样,没有任何内容高于
MainWindow
,结果相同

现在,如果在XAML中执行以下操作:

<Label x:Name="MyLabel" Content="Hello World">
在冒泡事件的情况下,路线如下:

标签
(源)->
网格
->
主窗口

在隧道事件中:

main窗口
->
网格
->
标签
(来源)


这个人也有同样的问题。

回答得很好!谢谢你的回答!谢萨洛特
MyLabel.RaiseEvent(newEventArgs);