Ho un UserControl WPF in cui cerco di realizzare il personalizzato MouseClick (perché non v'è alcuna MouseClick
evento in un controllo WPF (Utente)) evento.'System.StackOverflowException' verificato in PresentationCore.dll
ho ottenuto il seguente:
Alcuni codice:
/// <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;
}
Allora, dov'è il problema?
UPDATE 1
protected virtual void OnMouseClick(MouseButtonEventArgs e)
{
//base.RaiseEvent(e);
MouseButtonEventArgs args = new MouseButtonEventArgs(e.MouseDevice, e.Timestamp, e.ChangedButton);
this.RaiseEvent(args);
}
valore non può essere null. Nome del parametro: RoutedEvent
UPDATE 2
Un altro evento personalizzato ho implementato con successo (lavoro senza problemi) - SelectedChanged
:
static void OnIsSelectedChanged(DependencyObject source, DependencyPropertyChangedEventArgs e)
{
var s = (MyControl)source;
s.RaiseEvent(new RoutedEventArgs(SelectedChangedEvent, s));
}
UPDATE 3
sistema. Implementazione OnPreviewMouseDoubleClick di Windows.Controls.Control:
protected virtual void OnPreviewMouseDoubleClick(MouseButtonEventArgs e)
{
base.RaiseEvent(e);
}
Aggiornamento 5 (per le persone nella vasca)
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);
}
}
+1 per il titolo che contiene SO. – Moshe