So, I just wasted a couple of hours trying to figure this one out so I thought I’d post about it so you guys don’t have to waste as much time as I did on it.
The WPF VisualStateManager implementation is still not as rock solid as Silverlight’s implementation (ok, let’s face it, Silverlight’s implementation is far from rock solid too, but it is much better of at this point). If you are trying to call the VisualStateManager.GotoState Method on a Window, you are going to be very very frustrated. Why? Because it doesn’t work. If you are inside a user control, it is fine, but inside of a Window… nope!
Instead of calling this
VisualStateManager.GoToState(this, "stateName", true);
You are going to need to call this
VisualStateManager.GoToElementState(this.RootElement as FrameworkElement, "stateName", true);
That should do it for you. Microsoft is aware of the issue and has promised to fix this, but who knows when that’s going to happen.