Frage

In Silverlight 3, Ich versuche, ein Pop-up-Menü für die Navigation zu erstellen. Ich verwende einen Hyperlink als Auslöser, die, wenn sie über ein Popup-Displays mit mehr HyperlinkButtons moused. Der Wurzelknoten ist rechts ausgerichtet, und ich möchte das Untermenü auf der linken Seite angezeigt werden. Mein Problem ist, dass ich versuche, das Popup mit seiner Actual Eigenschaft zu positionieren, aber dieser Wert erscheint auf der Größe des Wurzelelementes befestigt (die den Auslöser und das Popup enthält), so dass, wenn die Popup-enger ist es hinterlässt eine unansehnliche Lücke und wenn breiter überschreibt den Auslöser.

Hier ist meine 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>

und mein Code:

    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;
    }

Ich habe versucht, die Pop-up-Kinder Breite verwenden, aber dies wird auf 0 während der MouseEnter- Ereignis gesetzt, weil es versteckt ist.

Ich bin neu in Silverlight so dass jede Hilfe würde geschätzt.

War es hilfreich?

Lösung

Die Popup erweitern die Rasterspalte, aber der Inhalt des Popup zu füllen ist nicht tatsächlich gemessen und positioniert ist, bis die Popup angezeigt wurde. Sie können durch die Benennung den Inhalt der Hyperlink dieses Problem umgehen. Es sei angenommen, dass der innere Hyperlink ist s benannt. Dann können Sie Ihre Ereignishandler diese ändern:

private void hl_MouseEnter(object sender, MouseEventArgs e)
{
  p.IsOpen = true;
  p.UpdateLayout();
  p.HorizontalOffset = -s.ActualWidth;
}

Nach dem Aufruf der inneren UpdateLayout Hyperlink hat seine natürliche Größe.

Leider schließt das Popup sobald die Maus den Eltern Hyperlink lassen was es unmöglich macht, das Kind Hyperlink zu klicken.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top