Question

J'ai des problèmes d'ajouter des éléments de panorama par le code.

Voici XAML test qui fonctionne.

<controls:Panorama x:Name="pano">
    <controls:Panorama.Title>...</controls:Panorama.Title>
    <controls:Panorama.Background>...</controls:Panorama.Background>
    <local:TestPanoramaItem ...></local:HoroscopePanoramaItem>
    <local:TestPanoramaItem ...></local:HoroscopePanoramaItem>
    <local:TestPanoramaItem ...></local:HoroscopePanoramaItem>
</controls:Panorama>

TestPanoramaItem est classe héritant de PanoramaItem et dans tous XAML fonctionne très bien. Maintenant, je veux réorganiser les éléments de panorama par code.

EDIT: Je retire articles de XAML à partir de maintenant

J'ai fait l'ordre par défaut dans la chaîne statique "Pan1, pan2, Pan3, ..." et OnNavigatedToHandler (en MainPage) i utiliser le code comme ceci:

protected override void OnNavigatedTo(NavigationEventArgs e)
        {
            String[] order = App.Order.Split(',');
            App.items.Clear();
            foreach (String o in order)
            {
                switch (o)
                {
                    case "pan1": App.items.Add(App.pan1); break;
                    case "pan2": App.items.Add(App.pan2); break;
                    case "pan3": App.items.Add(App.pan3); break;
                    ...
                }
            }
            pano.Items.Clear();

            foreach (TestPanoramaItem ti in App.items)
                pano.Items.Add(ti);
            base.OnNavigatedTo(e);
        }

Pour la première fois appelé (ce qui est MainPage) tout est ok. Panorama fonctionne. J'y suis bouton de menu qui accède à des paramètres où je peux changer l'ordre des éléments. Le gestionnaire OnNavigateFrom dans la page des paramètres i mettre à jour App.Order chaîne statique. Après cette OnNavigatedTo de la page principale est appelée à nouveau et tout va bien (sans exception), mais je ne peux pas déplacer panorama et des éléments de mise en page panorama est cassé.

Toute aide ou solutions?

Était-ce utile?

La solution

Les regards de problème à dans une partie du code que vous ne partagez pas avec nous.
Essayez de créer l'exemple complet le plus petit possible qui illustre le problème.

Il semble aussi avoir une certaine confusion entre TestPanoramaItem et HoroscopePanoramaItem dans le code dans votre question.

Je peux dynamiquement réorganiser PanoramaItems standard sans problème.
Ce qui suit est basé sur le modèle par défaut Panorama:

Mainpage.xaml:

<Grid x:Name="LayoutRoot" Background="Transparent">
    <controls:Panorama Name="myPano" Title="my application">
        <controls:Panorama.Background>
            <ImageBrush ImageSource="PanoramaBackground.png"/>
        </controls:Panorama.Background>
    </controls:Panorama>
</Grid>

<!--Panorama-based applications should not show an ApplicationBar but this is just for testing-->
<phone:PhoneApplicationPage.ApplicationBar>
    <shell:ApplicationBar IsVisible="True" IsMenuEnabled="True">
        <shell:ApplicationBarIconButton IconUri="/Images/appbar_button1.png" Text="Button 1" Click="ApplicationBarIconButton_Click"/>
    </shell:ApplicationBar>
</phone:PhoneApplicationPage.ApplicationBar>

MainPage.xaml.cs

    protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
    {
        myPano.Items.Clear();

        if (new Random().Next(1, 2) == 1)
        {
            myPano.Items.Add(App.pan1);
            myPano.Items.Add(App.pan2);
            myPano.Items.Add(App.pan3);
        }
        else
        {
            myPano.Items.Add(App.pan1);
            myPano.Items.Add(App.pan3);
            myPano.Items.Add(App.pan2);
        }

        base.OnNavigatedTo(e);
    }

    private void ApplicationBarIconButton_Click(object sender, EventArgs e)
    {
        NavigationService.Navigate(new Uri("/Page1.xaml", UriKind.Relative));
    }

App.xaml.cs:

public static PanoramaItem pan1
{
    get { return new PanoramaItem { Header = "first item" }; }
}
public static PanoramaItem pan2
{
    get { return new PanoramaItem { Header = "second item" }; }
}
public static PanoramaItem pan3
{
    get { return new PanoramaItem { Header = "third item" }; }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top