Domanda

Ho problemi aggiungendo elementi panorama tramite il codice.

Ecco test di XAML che le opere.

<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 è classe che eredita da PanoramaItem e in XAML tutto funziona bene. Ora voglio articoli panorama di riordino tramite il codice.

Modifica Ho rimosso gli elementi da XAML da ora in poi

Ho fatto ordine predefinito nella stringa statica come "Pan1, pan2, PAN3, ..." e sul OnNavigatedToHandler (in MainPage) io uso il codice come questo:

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

Per la prima volta chiamato (questo è in MainPage) tutto sembra ok. Panorama funziona. Ci devo pulsante del menu che naviga alle impostazioni dove posso cambiare l'ordine delle voci. Su OnNavigateFrom gestore in pagina delle impostazioni aggiorno App.Order stringa statica. Dopo di che OnNavigatedTo pagina principale si chiama di nuovo e tutto va bene (senza eccezioni), ma i cant spostare panorama e articoli panorama di layout è rotto.

Qualsiasi aiuto o soluzioni?

È stato utile?

Soluzione

Gli sguardi problema di essere in parte del codice che non stai condividendo con noi.
Prova a creare il più piccolo esempio completo possibile, che viene illustrato il problema.

Ci sembra anche essere un po 'di confusione tra TestPanoramaItem e HoroscopePanoramaItem nel codice nella tua domanda.

posso riorganizzare in modo dinamico PanoramaItems standard, senza alcun problema.
Quanto segue si basa sul modello Panorama di default:

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" }; }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top