This is my first attempt to define my own RoutedEvent. When I debug this project, the OnMouseMove is reached as soon as I hover over the ellipse shape, but RaiseEvent does nothing. It's not even possible to step into RaiseEvent to see what's wrong (debugger just steps over).
Control:
using System;
using System.Windows;
using System.Windows.Controls;
using System.ComponentModel;
using System.Windows.Input;
using System.Windows.Controls.Primitives;
namespace TestTrailer2
{
public class Trailer2: Control
{
public static readonly RoutedEvent DragDeltaEvent;
public event DragDeltaEventHandler DragDelta
{
add {AddHandler(Trailer2.DragDeltaEvent, value);}
remove {RemoveHandler(Trailer2.DragDeltaEvent, value);}
}
static Trailer2()
{
Trailer2.DragDeltaEvent = EventManager.RegisterRoutedEvent("DragDelta", RoutingStrategy.Bubble, typeof(DragDeltaEventHandler), typeof(Trailer2));
}
protected override void OnMouseMove(MouseEventArgs e)
{
base.OnMouseMove(e);
RaiseEvent(new DragDeltaEventArgs(0, 0));
}
}
}
Code behind:
using System;
using System.Windows;
namespace TestTrailer2
{
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
}
void Trailer2_DragDelta(object sender, System.Windows.Controls.Primitives.DragDeltaEventArgs e)
{
throw new NotImplementedException();
}
}
}
Markup:
<Window x:Class="TestTrailer2.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:TestTrailer2"
Title="TestTrailer2" Height="300" Width="300">
<Window.Resources>
<Style TargetType="{x:Type local:Trailer2}">
<Setter Property="RenderTransformOrigin" Value="0.5,0.5"/>
<Setter Property="Cursor" Value="Hand"/>
<Setter Property="Control.Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:Trailer2}">
<Ellipse Width="100" Height="100" Fill="#AAD0D0DD"/>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Window.Resources>
<local:Trailer2 DragDelta="Trailer2_DragDelta">
</local:Trailer2>
</Window>