Simplest example: I have a container with three children, and I want to highlight each child when mouse hovers over them. Seems we could do: Each child: create two VisualElements, one for 'normal', one for 'hovered' Each child: RegisterCallback<MouseOverEvent>() ... hide the 'normal' element, show the 'hovered' element Each child: RegisterCallback<MouseOutEvent>() ... [reverse the above] This is terrible: it causes flickering because of the way UIToolkit chooses to process Out/Over. It also often fails to trigger the MouseOutEvent because of flaws (I'd say 'bugs' but I've reported one and it was rejected as 'broken but too difficult to fix', so ... we'll call them 'flaws') in how MouseOut is implemented ... there's a timing bug and a pixel-sensitivity bug, and there's a popup menu bug, and ... and ... and: basically MouseOut is mostly useless in real-world apps. OK. So ... if we remove the MouseOutEvent and try to achieve the same effect only using MouseOver: Store 'last hovered VisualElement' Each child: create two VisualElements, one for 'normal', one for 'hovered' Each child: RegisterCallback<MouseOverEvent>() ... hide the 'normal' element, show the 'hovered' element. Also: if there was a 'last hovered' item, reverse the above to reset it Also: mark self as the new 'last hovered' item But this doesn't work because there's no 'mouse has left the VisualElement tree' callback, so if the user moves mouse onto a different window we're left with incorrect visual state. ... So. Is there a better way to achieve this common pattern? The above approaches are both clean, require little code, and work great except that MouseOutEvent has problems. I'm hopeful there's an equally simple solution that works much better?