В Silverlight 3 я пытаюсь создать всплывающее меню для навигации. Я использую HyperlinkButton в качестве триггера, который при наведении мыши отображает всплывающее окно, содержащее больше HyperlinkButtons. Корневой узел выровнен по правому краю, и я хочу, чтобы подменю появилось слева. Моя проблема в том, что я пытаюсь расположить всплывающее окно, используя его свойство ActualWidth, но это значение кажется фиксированным с размером корневого элемента (который содержит триггер и всплывающее окно), поэтому, если всплывающее окно уже, оно оставляет неприглядный пробел если шире, перезаписывает триггер.
Вот мой XAML:
<Grid x:Name="LayoutRoot" Background="White">
<Grid.Resources>
<Style x:Key="MenuItemStyle" TargetType="HyperlinkButton">
<Setter Property="Background" Value="Blue" />
<Setter Property="Foreground" Value="White" />
<Setter Property="HorizontalContentAlignment" Value="Center" />
</Style>
</Grid.Resources>
<Grid x:Name="Root" HorizontalAlignment="Right" VerticalAlignment="Top">
<HyperlinkButton
x:Name="hl"
Style="{StaticResource MenuItemStyle}"
MouseEnter="hl_MouseEnter" MouseLeave="hl_MouseLeave">
<HyperlinkButton.Content>
<Grid>
<TextBlock Text="MenuRoot" />
</Grid>
</HyperlinkButton.Content>
</HyperlinkButton>
<Popup x:Name="p">
<Popup.Child>
<HyperlinkButton
Style="{StaticResource MenuItemStyle}">
<HyperlinkButton.Content>
<StackPanel>
<TextBlock Text="Sub" />
</StackPanel>
</HyperlinkButton.Content>
</HyperlinkButton>
</Popup.Child>
</Popup>
</Grid>
</Grid>
и мой код:
private void hl_MouseEnter(object sender, MouseEventArgs e)
{
p.HorizontalOffset = -p.ActualWidth;
p.IsOpen = true;
}
private void hl_MouseLeave(object sender, MouseEventArgs e)
{
p.IsOpen = false;
}
Я попытался использовать ширину дочернего элемента всплывающего окна, но во время события MouseEnter для него установлено значение 0, поскольку оно скрыто.
Я новичок в Silverlight, поэтому любая помощь будет принята.