J'ai un WPF UserControl dans lequel je tente de mettre en œuvre la mesure MouseClick (car il n'y a pas événement MouseClick
sur WPF (utilisateur) Contrôle) événement.« System.StackOverflowException » est produite dans PresentationCore.dll
j'obtenu ce qui suit:
Certains code:
/// <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;
}
Alors, où est le problème?
MISE À JOUR 1
protected virtual void OnMouseClick(MouseButtonEventArgs e)
{
//base.RaiseEvent(e);
MouseButtonEventArgs args = new MouseButtonEventArgs(e.MouseDevice, e.Timestamp, e.ChangedButton);
this.RaiseEvent(args);
}
valeur ne peut pas être nulle. Nom du paramètre: RoutedEvent
MISE À JOUR 2
Un autre événement personnalisé Je mis en œuvre avec succès (travail sans problèmes) - SelectedChanged
:
static void OnIsSelectedChanged(DependencyObject source, DependencyPropertyChangedEventArgs e)
{
var s = (MyControl)source;
s.RaiseEvent(new RoutedEventArgs(SelectedChangedEvent, s));
}
MISE À JOUR 3
système. Implémentation OnPreviewMouseDoubleClick de Windows.Controls.Control:
protected virtual void OnPreviewMouseDoubleClick(MouseButtonEventArgs e)
{
base.RaiseEvent(e);
}
Mise à jour 5 (pour les personnes dans le réservoir)
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 pour le titre contenant SO. – Moshe