Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/304.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 RoutedEventHandler无法处理内容_C#_Wpf_Routedevent - Fatal编程技术网

C# WPF RoutedEventHandler无法处理内容

C# WPF RoutedEventHandler无法处理内容,c#,wpf,routedevent,C#,Wpf,Routedevent,我对c#WPF RouteEvent有问题。此代码工作正常: MyLabel myLabel = new MyLabel();//MyOwn component myLabel.Oma += new RoutedEventHandler(myLabel_Click); GameArea.Children.Add(mylabel);//GameArea is UniformGrid 但当我将myLabel放入ToggleButton的内容中时,ro

我对c#WPF RouteEvent有问题。此代码工作正常:

        MyLabel myLabel = new MyLabel();//MyOwn component
        myLabel.Oma += new RoutedEventHandler(myLabel_Click);
        GameArea.Children.Add(mylabel);//GameArea is UniformGrid
但当我将myLabel放入ToggleButton的内容中时,routedeventhandler(myLabel_Click)无法捕获Oma事件(我调试了该事件):

那么为什么ToggleButton会阻止我的routedevent呢

编辑: 代码工作正常,但当我将myLabel放入ToggleButton的内容时,它会带来麻烦。
MyLabel中的事件如下所示:

public static readonly RoutedEvent OmaEvent =
EventManager.RegisterRoutedEvent("Oma", RoutingStrategy.Bubble,
typeof(RoutedEventHandler), typeof(MyLabel));

    public event RoutedEventHandler Oma
    {
        add { AddHandler(OmaEvent, value); }
        remove { RemoveHandler(OmaEvent, value); }
    }

    protected override void OnMouseDown(MouseButtonEventArgs e)
    {
        base.OnMouseDown(e);
        CaptureMouse();
    }

    protected override void OnMouseUp(MouseButtonEventArgs e)
    {
        base.OnMouseUp(e);
        if (IsMouseCaptured)
        {
            ReleaseMouseCapture();
            if (IsMouseOver)
                RaiseEvent(new RoutedEventArgs(OmaEvent, this));
        }

    }

如果我把它放在开关按钮里,它永远不会升起。如果我不把它放在切换按钮里,它就会工作

听起来您的自定义
Oma
事件可能与您尝试执行的操作不匹配

如果
Oma
事件是设置为
Direct
的RoutedEvent,并且
MyLabel
类的类型为
UIElement
,则您应该能够执行以下操作:

GameArea.Children.Add(box);//GameArea is UniformGrid
GameArea.AddHandler(Oma, new RoutedEventHandler(myLabel_Click));

未引发
Oma
事件,因为父级
ToggleButton
在其
ButtonBase.OnMouseLeftButtonDown
方法中窃取鼠标捕获,该方法在
OnMouseDown
方法后被调用。只要
ToggleButton
具有鼠标捕获功能,其他元素就不会接收鼠标事件,因此标签不会接收
MouseUp
事件,并且不会调用
OnMouseUp
方法


设置
e.Handled=trueOnMouseDown
方法中的code>,以防止事件冒泡到
ToggleButton
。这将防止它窃取焦点,但也会阻止在单击内的
MyLabel
时按钮正常工作。目前尚不清楚在这种情况下您想要什么行为。

您可以共享MyLabel类和Oma事件代码吗?您可以验证当标签放置在
切换按钮中时,
OmaEvent
是否确实被引发吗?在标签的
OnMouseUp
method.OmaEvent中设置一个断点,如果我将它放在ToggleButton中,它将永远不会引发。如果我不把它放在切换按钮里,它就会工作。
GameArea.Children.Add(box);//GameArea is UniformGrid
GameArea.AddHandler(Oma, new RoutedEventHandler(myLabel_Click));