I have been playing with Silverlight 2 Beta 2. I've always liked creating WPF applications (even if the UI performance is poor), but being able to create the same applications in a browser environment is pretty cool.
However, there are some fundamentals needed to create really good GUI applications under Silverlight:
- Ability to derive directly from FrameworkElement and overloading MeasureOverride(), ArrangeOverride(), GetVisualChild(), and VisualChildCount are necessary
- Ability to draw directly to a DrawingContext are necessary
These are 2 features which are fundamental to creating a full graphics editor.
Because of #1, all custom controls must be derived from other custom controls. If you want a custom container, it must be derived from Canvas, etc. Even if your control is not a container in the traditional sense of the word, it needs to be a container if you want to do any custom drawing, because you cannot just draw, you must create child geometry controls which must be contained within your non-container control.
Because of #2, you have to keep a map between your data objects and your on-screen graphical objects. Doable, but it's going through hoops to accomplish something simple in a desktop application.