ฉันได้สร้างตัวจัดการเหตุการณ์แบบกำหนดเองใน usercontrol ของฉัน:
public partial class FooControl
{
public event RoutedEventHandler AddFoo;
private void AddFoo_Click(object sender, RoutedEventArgs e)
{
if (AddFoo != null)
AddFoo(this, new RoutedEventArgs());
}
}
เมื่อฉันต้องการจัดการกับเหตุการณ์เช่นนี้ ทุกอย่างทำงานได้ดี:
<controls:FooControl AddFoo="FooControl_OnAddFoo"/>
ฉันอยากจะทำเช่นนั้น แต่แล้วมีบางอย่างขัดข้อง และฉันไม่รู้ว่าทำไม
<Style TargetType="controls:FooControl">
<EventSetter Event="AddFoo" Handler="Event_AddFoo"/>
</Style>
ข้อมูลเพิ่มเติม: ตัวแก้ไขขีดเส้นใต้ AddFoo ใน EventSetter และพูดว่า
- เหตุการณ์ "AddFoo" ไม่ใช่เหตุการณ์ที่กำหนดเส้นทาง
- ฟิลด์ตัวอธิบายเหตุการณ์ที่กำหนดเส้นทาง "AddFooEvent" หายไป
- ส่งข้อยกเว้น: มีข้อยกเว้นเกิดขึ้น: 'System.Windows.Markup.XamlParseException' ใน PresentationFramework.dll
- ข้อยกเว้นภายในบอกว่าค่าต้องไม่เป็นโมฆะ
แก้ไข:
public static readonly RoutedEvent AddEvent =
EventManager.RegisterRoutedEvent
("AddEvent", RoutingStrategy.Bubble,
typeof(RoutedEventHandler), typeof(FooControl));
public event RoutedEventHandler AddFoo
{
add { AddHandler(AddEvent, value); }
remove { RemoveHandler(AddEvent, value); }
}
void RaiseAddEvent()
{
RoutedEventArgs newEventArgs = new RoutedEventArgs(FooControl.AddEvent);
RaiseEvent(newEventArgs);
}
private void AddFoo_Click(object sender, RoutedEventArgs e)
{
RaiseAddEvent();
}
EventSetter
รองรับเฉพาะเหตุการณ์ที่กำหนดเส้นทางเท่านั้น กิจกรรมของคุณเป็นกิจกรรม CLR ธรรมดา คุณสามารถแปลงเหตุการณ์AddFoo
ของคุณเป็นเหตุการณ์ที่กำหนดเส้นทางได้ - person dymanoid   schedule 11.01.2019