В PresentationCore произошло исключение System.StackOverflowException. dll

У меня есть WPF UserControl, в котором я пытаюсь реализовать пользовательский MouseClick (потому что нет события MouseClick в элементе управления WPF (User) ) событие.

Я получил следующее:

alt text

Некоторый код:

/// <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

alt text

UPDATE 2

Другое настраиваемое событие, которое я успешно реализовал (работает без проблем) - SelectedChanged :

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

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

UPDATE 3

Реализация OnPreviewMouseDoubleClick System.Windows.Controls.Control :

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);
    }
}
5
задан serhio 21 November 2010 в 16:16
поделиться