加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

.net – PresentationCore.dll中出现’System.StackOverflowExce

发布时间:2020-12-14 01:59:45 所属栏目:Windows 来源:网络整理
导读:我有一个 WPF UserControl,我尝试在其中实现自定义MouseClick(因为WPF(用户)控件上没有MouseClick事件)事件. 我得到以下内容: 一些代码: /// summary/// Occurs when users left clicks the MyControl./// /summarypublic event MouseButtonEventHandler M
我有一个 WPF UserControl,我尝试在其中实现自定义MouseClick(因为WPF(用户)控件上没有MouseClick事件)事件.

我得到以下内容:

一些代码:

/// <summary>
/// Occurs when users left clicks the MyControl.
/// </summary>
public event MouseButtonEventHandler MouseClick { add { AddHandler(MouseClickEvent,value); } remove { RemoveHandler(MouseClickEvent,value); } }

    protected virtual void OnMouseClick(MouseButtonEventArgs e)
    {
        base.RaiseEvent(e);
        //this.RaiseEvent(new RoutedEventArgs(MouseClickEvent,this));
    }

    protected override void OnMouseLeftButtonUp(MouseButtonEventArgs e)
    {
        base.OnMouseLeftButtonUp(e);
        if (!this.movedAfterMouseDown)
        {
            OnMouseClick(e);
        }
        this.gotLeftButtonDown = false;
        this.movedAfterMouseDown = false;
    }

那么,问题出在哪里?

更新1

protected virtual void OnMouseClick(MouseButtonEventArgs e)
{
    //base.RaiseEvent(e);
    MouseButtonEventArgs args = new MouseButtonEventArgs(e.MouseDevice,e.Timestamp,e.ChangedButton);
    this.RaiseEvent(args);
}

值不能为空.
参数名称:routedEvent

更新2

我成功实现的其他自定义事件(没有问题的工作) – SelectedChanged:

static void OnIsSelectedChanged(DependencyObject source,DependencyPropertyChangedEventArgs e)
{
    var s = (MyControl)source;

    s.RaiseEvent(new RoutedEventArgs(SelectedChangedEvent,s));
}

更新3

System.Windows.Controls.Control的OnPreviewMouseDoubleClick实现:

protected virtual void OnPreviewMouseDoubleClick(MouseButtonEventArgs e)
{
    base.RaiseEvent(e);
}

更新5(对于坦克中的人)

class Foo : FrameworkElement
{
    event EasterCameEvent; // I named it MouseClick

    public DoSomething()
    {
        EasterCameArgs args= ...

        if (Date.Now = EasterDate)
            OnEasterCame(args)
    }

    protected virtual void OnEasterCame(EasterCameArgs e)
    {
        base.RaiseEvent(e);
    }
}

解决方法

protected virtual void OnMouseClick(MouseButtonEventArgs e)
{
    MouseButtonEventArgs args = new MouseButtonEventArgs(e.MouseDevice,e.ChangedButton);

    // Don't forget this
    args.RoutedEvent = MouseClickEvent;

    base.RaiseEvent(args);
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读