AJAX, Silverlight, WPF & More

The Windows Vista WOW has Started

Monday, January 29, 2007 8:12:23 PM (Eastern Standard Time, UTC-05:00)

As the clock strikes midnight around the world, signs of the consumer release of Windows Vista have started to surface.

Pick a WOW any WOW!

Retailers have started getting their displays ready, with many of them holding special launch celebrations

 

 

And some even have systems with Vista pre-loaded ready to go.

 

Technorati tags: , ,

Posted in  |   | Comments [1] 


WPF Must see - Doninoken

Saturday, January 27, 2007 1:33:33 AM (Eastern Standard Time, UTC-05:00)

 

I don't quite get it, but this is still a must see!!!!

Via Karsten

 

Technorati tags:

Posted in  | Comments [0] 


WCF: This collection already contains an address with scheme http

Wednesday, January 24, 2007 11:30:30 PM (Eastern Standard Time, UTC-05:00)

The Problem:

I recently ran into this problem issue trying to host a service through my shared web hosting service provider.

Server Error in '/' Application.

This collection already contains an address with scheme http.  There can be at most one address per scheme in this collection.
Parameter name: item

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.ArgumentException: This collection already contains an address with scheme http.  There can be at most one address per scheme in this collection.
Parameter name: item

The Solution:

The solution, since WCF services hosted in IIS can have only one Base Address was to create a custom service factory to intercept and remove the additional unwanted base addresses that IIS was providing. In my case IIS was providing:

domain.com
www.domain.com
dedicatedserver1234.hostingcompany.com

We are able to customize our .svc file to specif a custom serive factory

<%@ServiceHost language=c# Debug="true" Service="Microsoft.ServiceModel.Samples.CalculatorService"
Factory="Microsoft.ServiceModel.Samples.CustomHostFactory" %>

We are then able to create our custom factory by inheriting from ServiceHostFactory and overriding as required

    class CustomHostFactory : ServiceHostFactory 
    {
        protected override ServiceHost CreateServiceHost(Type serviceType, Uri[] baseAddresses)
        {
              CustomHost customServiceHost =
                new CustomHost(serviceType, baseAddresses[1]);
            return customServiceHost;
        }
    }

    class CustomHost : ServiceHost
    {
        public CustomHost(Type serviceType, params Uri[] baseAddresses)
            : base(serviceType, baseAddresses)
        { }
        protected override void ApplyConfiguration()
        {
            base.ApplyConfiguration();
        }
    }

In my case I decided to pass through baseAddresses[1] (which was the www. address) but it would probably be wise to specify that address you want to prevent changes by your web host from impacting yoru code.

Big thanks to those at WebHost4Life that put the time into helping me resolve this.

 

Technorati tags:

 

 

Posted in  | Comments [12] 


It Snows Here Too

Thursday, January 18, 2007 6:26:25 PM (Eastern Standard Time, UTC-05:00)

Hey, look D'Arcy, it snows here too....

 

Technorati tags: ,

Posted in  | Comments [1] 


TimeLinePanel - Custom WPF Control Part 2

Thursday, January 11, 2007 9:01:37 PM (Eastern Standard Time, UTC-05:00)

So Dwayne tells me that my Timeline Panel is in desperate need of a graphics artist. Ouch. While it didn't actually hurt my feelings, it was good motivation to get Part 2 online here which shows that the screenshot I left you all with of the basic timeline was really just showing the functionality of organizing textblock elements based on their event date.

In order to do the layout I override the ArrangeOverride method and introduce my own code to adjust the horizontal positioning. I utilize a ConvertDateToPosition function in which I calculate the _eventDate's position relative to the start and end dates provided to the panel. This could be inferred from the child dates but I decided to allow this to be set independently.

        protected override System.Windows.Size ArrangeOverride(System.Windows.Size finalSize)
        {
            foreach (UIElement child in base.InternalChildren)
            {
                Size sizeChild = new Size(child.DesiredSize.Width, child.DesiredSize.Height);
                
                DateTime _eventDate = (DateTime)child.GetValue(EventDateProperty);
                double NewSize = ConvertDateToPosition(_eventDate, _startDate, _endDate);
                NewSize = NewSize*finalSize.Width;

           child.Arrange(new Rect(ptChild, sizeChild));
       }
       return finalSize;
 

Now the cool thing about the way that XAML and WPF handle child elements is that they can be of any type. Initially I used boring text boxes, but they could be Ellipses....

Or buttons...

Really any element could be used. The next step to follow my original Kayakalon example was to have the width of the elements determined as well by the end date provided. This would allow a more visual indication of the time spans.

To do this, I used the same ConvertDateToPosition function mentioned above to to calculate a new width for the child element which is inserted in the Child.Arrange call that executes for each child element during the ArrangeOveride method.

Before I forget, I wanted to mention that I also added some code in the arrange method to vertically stack the elements if their dates overlapped. This was done by tracking the potion and width of the last child element to see if the next one overlapped and if so increase it's vertical position. I also added the tick marks along the top by overriding the OnRender event.

Now I need to go make my hip shiny, trendy colored version of this for Dwayne.

 

Technorati tags: , ,

Posted in  |   | Comments [1] 


Thank You Juval Löwy and INETA

Thursday, January 11, 2007 7:39:48 PM (Eastern Standard Time, UTC-05:00)

A BIG thank you goes out to INETA for sponsoring a visit by Juval  Löwy of IDesign to speak to the Triangle .Net User Group (TRINUG) on the Windows Communication Foundation (

). It was an excellent presentation that left us all wanting to attend his master class and get our hands on his upcoming book! (Which is currently available thorugh Safari Rough Cuts)

Juval Löwy

Thanks!

 

Technorati tags: , ,

Posted in  |   | Comments [0] 


Blog Tag, I'm it?

Wednesday, January 10, 2007 5:21:56 AM (Eastern Standard Time, UTC-05:00)

If this had shown up in an email I would have just deleted it, but I'll join in after the tag from Matt. In the spirit of blogs, here are 5 lesser know things about me.

1. My first computer was a Commodore 64. Followed by an Amiga 1000, then 2000, 3000T and finally 4000 before the demise of Commodore. I admit it, I used to think DOS/Windows sucked.

2. I lapped the score in Astroids on my Atari 2600 not once, but twice in one sitting. I can't recall how long it took, but do remember being yelled at for missing at least two meals.

3. In 1994(?) I was responsible for bringing internet access to our city and surrounding areas. We started with a 128k frame relay connection and 10 US Robotics Sportster 28.8 modems.

4. I have a cat that can say her own name. (Mew)

5. I'm lame and can't stand games like this appearing all over the place so I decline any further "Tag"ing

Posted in  | Comments [0] 


TRINUG - Guest Speaker Juval Lowy

Wednesday, January 10, 2007 5:07:59 AM (Eastern Standard Time, UTC-05:00)

 Sorry for the late notice, but I just got back to town myself.... Juval Lowy will be speaking at the Triangle .Net User Group meeting TOMORROW Wednesday Jan 10th. This is one of those must see presentations.

Speaker: Juval Lowy
Programming Windows Communication Foundation - a Developer's Primer
How do you actually build and consume WCF-based services? At its core, the WCF programming model is simple and straightforward, requiring actually very little work on behalf of the developer. The session describes the essential WCF programming concepts: clients, services, contracts and end points, and shows how to build, configure and host simple services. After attending this session you will be able to start programming and exploring WCF.

Source: Triangle Dot Net Users Group > Home

Please also note the NEW MEETING LOCATION! http://www.trinug.org/Default.aspx?tabid=29

 

Technorati tags: , ,

Posted in  | Comments [0] 


TimeLinePanel - Custom WPF Control Part 1

Wednesday, January 10, 2007 4:39:18 AM (Eastern Standard Time, UTC-05:00)

Frequently when I see a new technology presented, there are often demos of key concepts that stick in my mind. These examples become things that I feel I must try to build and thoroughly understand myself. At Microsoft's Tech Ed conference in Boston back in June, one of the demos that really stuck with me was the "Kayakalon" demo application used in presentations by Robert Ingebretsen and Lauren Lavoie from the WPF team.

The demo application touched on a number of items revolving around the graphical display of airline flight searches returned from a kayak.com web service. The end result would display flight legs on a graphical time line.

The creation of this TimeLinePanel become a task on the learning list to help me understand. I began trying to recreate the functionality of the control. I started off by inheriting from a Panel control to build a custom panel that would horizontally position child elements based on date criteria.

public class TimeLinePanel : Panel

    {

        protected override System.Windows.Size ArrangeOverride(System.Windows.Size finalSize)

        {

            return base.ArrangeOverride(finalSize);

        }

 

        protected override System.Windows.Size MeasureOverride(System.Windows.Size availableSize)

        {

            return base.MeasureOverride(availableSize);

        }

    }

In order to handle the layout as required, we are able to override the ArrangeOverride and MeasureOverride methods. The MeasureOverride measures the size in layout required for child elements and determines a size for the element. The ArrangeOverride positions child elements and determines their size. What I wanted to do was to horizontally position the elements based two dates, the would become the start and stop dates for each object, or in the case of the above example the departure and arrival times of the flight legs. In order to take advantage of a WPF design, enabling me to put any type of child elements into this panel, I needed some way to attached these properties to any objects residing in this container, even if they had not concept of these dates.

In .Net 3.0, Microsoft introduces the concept of a DependencyProperty according to the docs "Represents properties that are registered with the Windows Presentation Foundation dependency property system. Dependency properties provide support for value expressions, property invalidation and dependent-value coercion, default values, inheritance, data binding, animation, property change notification, and styling. This class cannot be inherited."

More specifically, I want to make use of an attached property which is "A dependency property that can be attached to any DependencyObject type and that is not limited to the type which defines it. The attached property provider must provide a static get(PropertyName) and set(PropertyName) methods as accessors for these attached properties." So basically, in the end I can create a two properties, independent of their actual types, allowing me to define a start and end date that get attached to any child elements with default values, that can be changed. Through these I can control the layout of the controls.

        public static DependencyProperty EventDateProperty;

        public static DependencyProperty EventDateRangeProperty;

        static TimeLinePanel()

        {

            FrameworkPropertyMetadata metadata = new FrameworkPropertyMetadata(DateTime.Parse("1/1/0001"), FrameworkPropertyMetadataOptions.Inherits );

            FrameworkPropertyMetadata metadataB = new FrameworkPropertyMetadata(DateTime.Parse("1/1/0001"), FrameworkPropertyMetadataOptions.Inherits);

 

            EventDateProperty = DependencyProperty.RegisterAttached("EventDate",

                typeof(DateTime), typeof(Control),metadata);

            EventDateRangeProperty = DependencyProperty.RegisterAttached("EventDateRange",

                typeof(DateTime), typeof(Control), metadataB);

        }

 

        public static void SetEventDate(DependencyObject dependencyObject, DateTime eventdate)

        {

            dependencyObject.SetValue(EventDateProperty, eventdate);

        }

        public static void SetEventDateRange(DependencyObject dependencyObject, DateTime eventdaterange)

        {

            dependencyObject.SetValue(EventDateRangeProperty, eventdaterange);

        }

Once these properties are in place, I can define my elements like this:


    Windows 1.0
    Windows 2.0
    Windows 3.0
    Windows 3.1
    Windows NT 3.51
    Windows 95
    Windows NT 4
    Windows 98
    Windows 2000
    Windows Me
    Windows XP
    Windows Vista

The end result renders like this:

Working through this example I discovered a lot of cool things that I could easily do to add functionality to this control. The main take away is how you can control how child elements are arranged.

Technorati tags: , , ,

Posted in  | Comments [1]