Well, I thought I had this one solved. I simply changed the TreeViewItem's template to ignore whether a particular node was expanded or not. Looks great! But that's just it... it looks great! Keyboard navigation still responds as if the node was expanded or collapsed.
For instance, if I'm on the root node and hit the right arrow (nothing moves, nor should it) then hit down, I go to the first child of the root. However, if I'm on the root node and hit left (again, nothing moves) then hit down, I jump to the second root node, jumping over all the first node's children!
Needless to say that's not the behavior we want. We could simply swallow the left and right arrow keys, or simply abandon the treeview entirely and move to nested items presenters (which is sort of what a TreeView does anyway) but I'm hoping I don't have to re-create an entire control just for this functionality. Thoughts?
In your TreeViewItem template, you can set IsExpanded to true, and all of your items should then be expanded if they have child elements.
Unfortunately you may have to swallow those keystrokes to get the keyboard navigation you want, as the navigation you are seeing is by design.
You may be able to create a custom treeview inherited from TreeView and put those button events in there so that you can re-use it.