To hide and element's entire hierarchy, you need to use style.display = DisplayStyle.None, not style.visibility = Visibility.Hidden. The difference is that in the case of visibility, if a child element also sets their visibility to Visible, then it will supersede its parent's style and retain it's visibility.
Modifying the provided project's code to use DisplayStyle instead of Visibility makes the project behave as the user expected.