One of the really great things you can do with WPF is use
Mouse.OverrideCursor to set the cursor for the entire application. This is useful, for instance, if you want your application to perform a lengthy operation, and have the cursor change to a wait cursor, for the duration of the operation. You'd normally do this like:
public void DoAReallyLongOperation()
Cursor savedCursor = Mouse.OverrideCursor;
Mouse.OverrideCursor = savedCursor
So far, so good. Now, of course, you're going to run off to your Silverlight applications and do exactly the same for your lengthy operations, aren't you? After all, Silverlight is a lightweight version of WPF, so surely this will be there for you to use.
Well no. Silverlight doesn't support the
OverrideCursor, but adding it shouldn't be too hard, should it? Well, it turns out that adding the
OverrideCursor isn't as easy as you'd think it would be. If you change the cursor on your page to a wait cursor, for instance, it will still be an
IBeam when you move over a text box. This means that your code needs to traverse the visual tree looking for all of the child elements, and setting the cursor to the new cursor.
Edit: Since I posted this earlier today, an edge case was suggested that needed addressing. Basically, the code needs to be able to reset the text boxes back to the
IBeam assuming that the
OverrideCursor is set back.
The following class provides an attached property that should help greatly with this: