Skip to content


Creating a custom silverlight control

Download the complete source code from here

In this post, I will explain how to create a custom control in silverlight. The control we create is a simple control which will draw a circle, the radius of the circle is controlled through the exposed public property.

This is a simple control, but hope this will give you an idea about the approach to the custom control development in silverlight.

Create a the Silverlight class library project first

step1

I have named the solution and project as “SimpleControl”, after the class library is created, you will get a default class “Class1.cs”

delete that file. We don’t need that one; we will be creating a new one later.

step2

 

Add a new text file to the project and give it’s name “HostingSurface.xaml

step3

 

This xaml file is the root canvas for our control. After completing this, you have change the build action for this xaml file. Change the build action to “Embedded Resource

step4

 

Now we will, create the canvas using the xaml code…

step5

 

Inside this canvas, we will place the circle element that we are going to create.

Next, we need to create a class that will, does the actual rendering logic. For that, create a class called “HostingSurface.xaml.cs”

step6

Derive that class from the base “Control” class and we need two variables “hostingCanvas” and “circle”. “hostingCanvas” will point to the root canvas we created in the xaml file. And the “circle” variable, will hold the actual Ellipse element.

We have created a public property “Radius” which will control the radius of our circle. We will implement this later.

Now, we need to load the xaml file and need to initialize the “hostingCanvas” variable. For that we use the “InitializeXaml(…)” function.

step7

Since, we want to separate the rendering xaml from the code, for that purpose we are going to add a xaml file called “SimpleCircle.xaml” into the project. Otherwise, you can hardcode this string value in the class file itself, doing that will make the code unmanageable.

step8

Mark this xaml file as embedded resource.

step9

Then create an Ellipse element. Here we have created an Ellipse element with width and Height 100 pixels and filled it with the red color.

step10

We want this file to be loaded, for that go to the HostingSurface.xaml.cs file and read the embedded “SimpleCircle.xaml” file and convert into a Ellipse element. Here we have used XamlReader.Load(…) method to do this. After the circle variable is initialized, we add that element to the root canvas of our control (“hostingCanvas”).

step11

Now, we have the circle element. And we have to update the width and Height when the value of Radius is set.

step12

And we have completed the simple control. For testing this we need a Silverlight Application project. So create a silverlight application project and add that to our solution. Use the “Generate an HTML test page” option while creating this project.

step13

step14

Add the “SimpletControl” reference to the newly created siliverlight application project.

step15

 

You need to add, the namespace in the Page.xaml, like this

xmlns:Simple=”clr-namespace:SimpleControl;assembly=SimpleControl”

Add the our new control also to the page.xaml

step16

 

Now run the application, you can see a red circle inside a black rectangle.

Hope you all got some fair idea about the custom control development in silverlight. I have included complete screen shot, to just make sure everybody understand the flow.

You can download the complete source from here

Posted in Siliverlight.


5 Responses

Stay in touch with the conversation, subscribe to the RSS feed for comments on this post.

  1. Ajai says

    really nice

    Thanks

  2. Ratheesh says

    Cool, good article :)

  3. Vinod Chattergee says

    Good article.

  4. Pooja says

    its a vry good article.
    but i got error in this line..
    can you tel me how can i resolve it.
    i got erroe in this method: HostingSurface()
    inthis in this line: this.InitializeFromXaml(new System.IO.StreamReader(stream).ReadToEnd()) as Canvas;

    Error: ‘SimpleControl.HostingSurface’ does not contain a definition for ‘InitializeFromXaml’ and no extension method ‘InitializeFromXaml’ accepting a first argument of type ‘SimpleControl.HostingSurface’ could be found (are you missing a using directive or an assembly reference?)

  5. Rajeesh says

    Hi Pooja,

    This sample based on Silverlight Beta 1 and I think you are working on Beta 2 version which is root cause of this error.

    So try to use XamlReader.Load(string) method instead of “InitializeFromXaml(..)” and I hope it will work.

    Ta,
    Rajeesh



Some HTML is OK

or, reply to this post via trackback.