I have a list of hyperlinks that are displayed through ItemsControl , something like this:
<ItemsControl x:Name="SubMenu" Visibility="Collapsed"> <ItemsControl.ItemTemplate> <DataTemplate> <HyperlinkButton Content="{Binding Name}" NavigateUri="{Binding Url}" TargetName="ContentFrame" Style="{StaticResource LinkStyle}" /> </DataTemplate> </ItemsControl.ItemTemplate> <ItemsControl.ItemsPanel> <ItemsPanelTemplate> <StackPanel Style="{StaticResource LinksStackPanelStyle}" VerticalAlignment="Center" HorizontalAlignment="Left" /> </ItemsPanelTemplate> </ItemsControl.ItemsPanel> </ItemsControl>
what I need to do is list the actual hyperlinks in the submenu, for example:
foreach (UIElement child in SubMenu.Items) // this does not work! { HyperlinkButton hb = child as HyperlinkButton; if (hb != null && hb.NavigateUri != null) { if (hb.NavigateUri.ToString().Equals(e.Uri.ToString())) { VisualStateManager.GoToState(hb, "ActiveLink", true); } else { VisualStateManager.GoToState(hb, "InactiveLink", true); } } }
The problem is that I cannot find a way to list the actual user interface elements in ItemsCollection.Items.
Does anyone know how to do this or a possible workaround?
I can mention that what I am trying to do is to create a menu and submenu displaying hyperlinks clicked as a kind of crackers.
UPDATE: It would be best if I could somehow get to this stack panel, because this code works:
foreach (UIElement child in LinksStackPanel.Children) { HyperlinkButton hb = child as HyperlinkButton; if (hb != null && hb.NavigateUri != null) { if (hb.NavigateUri.ToString().Equals(e.Uri.ToString())) { VisualStateManager.GoToState(hb, "ActiveLink", true); } else { VisualStateManager.GoToState(hb, "InactiveLink", true); } } }
source share