У меня есть список гиперссылок, которые отображаются через ItemsControl
, что-то вроде этого:Перечислите ItemsControl.Items в UIElements
<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>
, что мне нужно сделать, это перечислить фактические гиперссылок в подменю, что-то вроде этого :
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);
}
}
}
проблема заключается в том, что я не могу показаться, чтобы найти способ, чтобы перечислить фактические элементы пользовательского интерфейса в ItemsCollection.Items.
Кто-нибудь знает, как это сделать или возможное обходное решение?
Я могу упомянуть, что то, что я пытаюсь сделать, - это создать меню и подменю, отображающие гиперссылки, щелкнутые как своего рода сухарики.
UPDATE: Лучше всего было бы, если бы я мог добраться до этого StackPanel как-то, потому что этот код, кажется, работает:
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);
}
}
}
Это заслуживает большего количества голосов. Только место в сети я нашел решение после поиска в течение дня. –