Help - wpf routed events in VB.net - can't find any examples

jnpir

Member
Joined
Apr 14, 2007
Messages
14
Programming Experience
10+
I've seen many examples of using wpf routed events all written in C# as copied below. I can't find any examples of the same kind of thing done in VB.net. Can someone please help me out here?
VB.NET:
public event RoutedPropertyChangedEventHandler<Color> SelectedColorChanged
        {
            add
            {
                AddHandler(SelectedColorChangedEvent, value);
            }

            remove
            {
                RemoveHandler(SelectedColorChangedEvent, value);
            }
        }

public static readonly RoutedEvent SelectedColorChangedEvent = EventManager.RegisterRoutedEvent(
            "SelectedColorChanged",
            RoutingStrategy.Bubble,
            typeof(RoutedPropertyChangedEventHandler<Color>),
            typeof(ColorPicker)
        );

private static void selectedColor_changed(DependencyObject d,
            DependencyPropertyChangedEventArgs e)
        {
            ColorPicker cPicker = (ColorPicker)d;
            cPicker.OnSelectedColorChanged((Color)e.OldValue, (Color)e.NewValue);
        }

        protected virtual void OnSelectedColorChanged(Color oldColor, Color newColor)
        {

            RoutedPropertyChangedEventArgs<Color> newEventArgs =
                new RoutedPropertyChangedEventArgs<Color>(oldColor, newColor);
            newEventArgs.RoutedEvent = ColorPicker.SelectedColorChangedEvent;
            RaiseEvent(newEventArgs);
        }
 
Last edited by a moderator:
I came up with this

After some trial and error I've come up with this. I'm still testing but it seems to work. Anyone that feels like adding anything or pointing out the flaws. Please reply.
VB.NET:
    Public Shared ReadOnly SelectedColorChangedEvent As RoutedEvent = _
      EventManager.RegisterRoutedEvent("SelectedColorChanged", RoutingStrategy.Bubble, GetType(RoutedPropertyChangedEventHandler(Of Color)), GetType(ColorPicker))

    Private Shared Sub selectedColor_changed(ByVal d As DependencyObject, ByVal e As DependencyPropertyChangedEventArgs)
        Dim cPicker As ColorPicker = CType(d, ColorPicker)
        cPicker.OnSelectedColorChanged(CType(e.OldValue, Color), CType(e.NewValue, Color))
    End Sub

    Protected Overridable Sub OnSelectedColorChanged(ByVal oldColor As Color, ByVal newColor As Color)
        Dim newEventArgs As New RoutedPropertyChangedEventArgs(Of Color)(oldColor, newColor)
        newEventArgs.RoutedEvent = ColorPicker.SelectedColorChangedEvent
        RaiseEvent SelectedColorChanged(Me, CType(newEventArgs, RoutedPropertyChangedEventArgs(Of Color)))
    End Sub

    Public Custom Event SelectedColorChanged As RoutedPropertyChangedEventHandler(Of Color)
        AddHandler(ByVal value As RoutedPropertyChangedEventHandler(Of Color))
            'AddHandler SelectedColorChanged, value
        End AddHandler

        RemoveHandler(ByVal value As RoutedPropertyChangedEventHandler(Of Color))
            'RemoveHandler SelectedColorChanged, value
        End RemoveHandler
        RaiseEvent(ByVal d As Object, ByVal e As RoutedPropertyChangedEventArgs(Of Color))
        End RaiseEvent
    End Event
 
Last edited by a moderator:
Doesn't appear to be working

After spending some time with the routed event written in VB it doesn't appear to actually work. The bubbled never happens. Is there anyone out there that can point me to any info on routed custom events written in VB. All the samples are in C#.
 
Hi There, I found myself in the same situation, no vb examples.
But your post was a good startin point. I think the key is that we are mapping a RoutedEvent to a CLR event.

Basiaclly we are saying that when a CLR handler is added the related WPF event handler needs to be added. I think you should change the Public Custom Event section with the following

VB.NET:
Public Custom Event SelectedColorChanged As RoutedPropertyChangedEventHandler(Of Color)
    AddHandler(ByVal value As RoutedPropertyChangedEventHandler(Of Color))
        'AddHandler SelectedColorChanged, value
        [COLOR="Red"]Me.AddHandler(SelectedColorChangedEvent,value)[/COLOR]
    End AddHandler

    RemoveHandler(ByVal value As RoutedPropertyChangedEventHandler(Of Color))
        'RemoveHandler SelectedColorChanged, value
        [COLOR="red"]Me.RemoveHandler(SelectedColorChangedEvent, value)[/COLOR]
    End RemoveHandler

    RaiseEvent(ByVal d As Object, ByVal e As RoutedPropertyChangedEventArgs(Of Color))
        Me.RaiseEvent(e)
    End RaiseEvent
End Event
Hope it works.
 
Last edited by a moderator:
Back
Top