Creating an Intellisense compatible enum-based Dependency Property

Actually, this post has a way too fancy title , because in fact I will merely show that enum-based dependency properties are IntelliSense compatible “out-of-the-box”. (by the way, if you know all about dependcy properties: simply read the line in bold and you’ll know all there is to know).

When creating a (WP7/SL/WPF) usercontrol, one often ends up creating one more dependency properties (DP). Most of the times you only want a discrete set of possible values that can be assigned to the DP. The logical choice then of course is to have an enum-based DP.

Now, for the Intellisense to work it is important that you define the enum type OUTSIDE the usercontrols class. For example, suppose we have define the following enum:

public enum GraphTypes {Default, Point, Line}

Now, all that remains is to add a DP that uses this enum (remember that you can use the ‘dependencyproperty’ snippet that comes with VS):

        public static readonly DependencyProperty GraphTypeProperty =
            DependencyProperty.Register("GraphType", typeof (GraphTypes), typeof (GraphControl), new PropertyMetadata(GraphTypes.Default));

        public GraphTypes GraphType
            get { return (GraphTypes) GetValue(GraphTypeProperty); }
            set { SetValue(GraphTypeProperty, value); }

Once you now add the usercontrol elsewhere in your xaml-code, IntelliSense will happily show what values can be assigned to the DP:

There we go. That’s all there was too it.

Next post I’ll show how to create a WP7 user control to plot graphs using data binding. Consider some of the code here a sneak preview.

5 gedachten over “Creating an Intellisense compatible enum-based Dependency Property

  1. Couldn’t get the Intellisense to work for me using this approach — a class OUTSIDE of the UserControl or even an enum in a class in a separate library outside of the project?? Are you using ReSharper or something else that might be doing the Intellisense for you?


  2. What you are missing in your code is the Public Shared Function GetEventType and SetEventType … it’s possible you are inheriting these from something else and hence you confusion as to why the Enum must be OUTSIDE the class … it does not.

    Here is correct code sample (in VB):

    Partial Public Class DCButtonMain
    Inherits UserControl

    Public Enum TestEvents
    End Enum

    Public Shared ReadOnly EventTypeProperty As DependencyProperty = DependencyProperty.Register(“EventType”, GetType(TestEvents), GetType(DCButtonMain), New PropertyMetadata(TestEvents.Forms))

    Public Shared Function GetEventType(ByVal obj As Button) As TestEvents
    Return CInt(obj.GetValue(EventTypeProperty))
    End Function

    Public Shared Sub SetEventType(ByVal obj As Button, ByVal value As TestEvents)
    obj.SetValue(EventTypeProperty, value)
    End Sub

    Private _EventType As TestEvents
    Public Property EvenType() As TestEvents
    Return _EventType
    End Get
    Set(ByVal value As TestEvents)
    _EventType = value
    End Set
    End Property

    Public Sub New
    End Sub

    End Class

    Cheers, Rob


  3. It worked for me as well inside the control class. Here is my snippet:

    #region CountryFormat
    public enum CountryFormats : int
    Alpha2Code = 0,
    Alpha3Code = 1,
    Name = 2
    public static readonly DependencyProperty CountryFormatProperty = DependencyProperty.Register
    new PropertyMetadata(CountryFormats.Name)
    public CountryFormats CountryFormat
    return (CountryFormats) GetValue(CountryFormatProperty);
    SetValue(CountryFormatProperty, value);

    switch (value)
    case CountryFormats.Alpha2Code:

    this.CountryAlpha2CodeBox.Visibility = Visibility.Visible;
    this.CountryAlpha3CodeBox.Visibility = Visibility.Collapsed;
    this.CountryNameBox.Visibility = Visibility.Collapsed;


    case CountryFormats.Alpha3Code:

    this.CountryAlpha2CodeBox.Visibility = Visibility.Collapsed;
    this.CountryAlpha3CodeBox.Visibility = Visibility.Visible;
    this.CountryNameBox.Visibility = Visibility.Collapsed;



    this.CountryAlpha2CodeBox.Visibility = Visibility.Collapsed;
    this.CountryAlpha3CodeBox.Visibility = Visibility.Collapsed;
    this.CountryNameBox.Visibility = Visibility.Visible;



Geef een reactie

Vul je gegevens in of klik op een icoon om in te loggen. logo

Je reageert onder je account. Log uit /  Bijwerken )


Je reageert onder je Twitter account. Log uit /  Bijwerken )

Facebook foto

Je reageert onder je Facebook account. Log uit /  Bijwerken )

Verbinden met %s

Deze site gebruikt Akismet om spam te bestrijden. Ontdek hoe de data van je reactie verwerkt wordt.

%d bloggers liken dit:
search previous next tag category expand menu location phone mail time cart zoom edit close