I agree to the Keep it simple rule :) - so David's proposal is the most simplest.
Let's say this: we have two kinds of user controls, Content Controls - which will only change in style for a concrete skin - and Container Controls - which manage layout, how it interacts with the user and the content contols and all - so, there are some
things to do:
1. identify these controls by type (content & container).
2. Set up a skin system than enables to change the style and the container controls that it desires. It can be, for example, only the main container page and the rest is done with styles..
3. Prepare the Container controls for:
3.1.- Take their main functionality out - in a related class. We should only touch "the View", hopefully no viewmodel will need to be touched.... And most of them will ony be "views" not having to display any data -that is a role
of the Content Controls.
3.2.- Being interchangeable - so I can change one control by other and everythink will have to keep working perfectly. Here we might need DI.
3.3.- Maybe, set up a "base container control" and the Skin container control will just inherit it and all its base behavior.
As Step one, I'll implement the style part and then, the Skin side...
Also, I am thinking, for having a clean project to put the main Skin functionalities in a separate project wich will be used from the main one.
Any suggestions on this? does this sounds good? please do not hesitate to correct me, there is always a "better implementation" ;)