Tôi có một WPF UserControl trong đó tôi cố gắng thực hiện các tùy chỉnh mouseclick (vì không có MouseClick
sự kiện trên một Control WPF (User)) sự kiện.'System.StackOverflowException' xảy ra ở PresentationCore.dll
tôi đã nhận như sau:
Một số mã:
/// <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;
}
Vì vậy, mà là vấn đề?
CẬP NHẬT 1
protected virtual void OnMouseClick(MouseButtonEventArgs e)
{
//base.RaiseEvent(e);
MouseButtonEventArgs args = new MouseButtonEventArgs(e.MouseDevice, e.Timestamp, e.ChangedButton);
this.RaiseEvent(args);
}
Giá trị không thể null. tên Parameter: routedEvent
UPDATE 2
Một sự kiện tùy chỉnh khác mà tôi thực hiện thành công (làm việc mà không vấn đề) - SelectedChanged
:
static void OnIsSelectedChanged(DependencyObject source, DependencyPropertyChangedEventArgs e)
{
var s = (MyControl)source;
s.RaiseEvent(new RoutedEventArgs(SelectedChangedEvent, s));
}
CẬP NHẬT 3
System. Triển khai OnPreviewMouseDoubleClick của Windows.Controls.Control:
protected virtual void OnPreviewMouseDoubleClick(MouseButtonEventArgs e)
{
base.RaiseEvent(e);
}
Cập nhật 5 (đối với người trong bể)
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 cho tựa đề chứa SO. – Moshe