The way I did it:
All my menu items are instances of the same sprite (or sprite font in my case to be more precise), with an instance variable called "index". Each item has a unique value indicating in which order it should be highlighted in the menu (0 for the first item, 1 for the second one and so on).
I create a global variable (or static local in a function) named "selected", which contain the index value of selected index. I default it to 0, so the first item is selected.
Then, for a vertical menu, I test if the Y axis of the stick is greater than 0. But in order to not go to the next item on every click, I add an "every X second" condition, where X can vary between 0.5 and 1s, depends how sensible you want the menu to be. Then in that condition I "unselect" the currently selected item, (by finding the item which index variable matches the global). Whatever that is, a highlight effect, a color or scale change, I remove it. Then I increment the global variable and select the item with matching index. If no matching item is found, that means we reached the end of the menu, there is no more item, so we go back to the first one, we set the global variable to 0 and select again the matching item.
For reverse selection, when stick Y is less than 0, this is a bit more tricky. Instead of incrementing the global variable, you decrement it, and when it reaches -1 (you went back past the first item) this time you must select the last item in the menu, you must find the item with the highest index value and set the global variable to this value. There are several ways to do that, the simplest is to count the number of instance of menu item and subtract 1 from it, but you have to make sure that all you items have properly numbered index starting form 0 and never skipping value (like 0-1-2-3-4 and not 0-1-2-4-6). Other methods would be to manually search the highest index with a "for each" loop and a temporary variable
The advantage of this method over hardcoding which button follows which, it that the menu become flexible, you can add, remove and reorder items without modifying the events. Then I also use a global variable stating if the menu is vertical or horizontal layout, in which case I test for the gamepad X axis instead of Y
It you don't use sprite font but each menu item is a different sprite instead, just put them all in a family, add the instance variable to the family use a that family in your events for selecting items
you can see it in action in my test HERE, the menu works with keyboard, gamepad, mouse and touch. you can also press Esc or the gamepad start button while in game to bring the pause menu