2011-01-20 4 views
0

J'utilise une page (appelée containerpage) avec un ContentPresenter (nommé PageContent) et définissez son contenu sur une instance PhoneApplicationPage (page de contenu) dans le gestionnaire d'événements OnNavigatedTo() de la page. J'ai aussi une page principale avec un bouton "Afficher le formulaire". Lorsque je clique sur ce bouton, le programme accède à la page conteneur, qui définit le contenu de son contenu sur la page de contenu. Mon problème est le suivant: si je clique sur « VISUALISER », puis appuyez sur le bouton de retour et cliquez sur « VISUALISER » encore une fois, je reçois ArgumentException avec le textewp7 contentpresenter - définition de contenu sur la même page

« Le paramètre est incorrect »

en ligne

this.PageContent.Content = contentpage; 

dans OnNavigatedTo() eventhandler du containerpage. Je suppose que c'est parce que j'ai déjà défini le contenu d'un autre ContentPresenter sur cette page de contenu (parce que la navigation crée une nouvelle page), mais si c'est le problème, comment puis-je désassigner ma page de contenu du ContentPresenter précédent?

+1

Ce serait mieux si vous publié votre XAML et code-behind ici. Et affichez les détails de l'exception complète. – decyclone

+0

vous avez une page avec le contenu avec une autre page à l'intérieur de cela? (PhoneApplicationPAge-> contentpresenter-> PhoneApplicationPage?) Qui semble plutôt confus et pourrait ne pas fonctionner comme vous vous attendez ... –

Répondre

0

Comme mentionné decyclone, votre question serait beaucoup plus clair avec le code détaillé. Cela dit, vous pourriez mettre en œuvre OnNavigatedFrom() sur votre conatinerpage et définissez le Content à null.

Vous voudrez peut-être examiner comment cette conception peut contenir jusqu'à si l'application se tombstone sur containerpage.

+0

Voici le code pour ContentPage (la page qui contient le ContentPresenter): – Vic

+0

override OnNavigatedFrom vide protégé (System.Windows.Navigation.NavigationEventArgs e) { base.OnNavigatedFrom (e); this.PageContent = null; this.DataContext = null; this.Content = null; } – Vic

+0

protégé override void OnNavigatedTo (System.Windows.Navigation.NavigationEventArgs e) { base.OnNavigatedTo (e); chaîne contentID; si (NavigationContext.QueryString.TryGetValue ("contentID", sur contentID)) { si (PhoneApplicationService.Current.State [ "content" + contentID]! = Null) { essayer { Page = PhoneApplicationService. Current.State ["content" + contentID] en tant que Page; this.PageContent.Contenu = page; } catch (ArgumentException ex) { } UpdateLayout(); } } } – Vic

0

Pour être honnête, je suis étonné que définir la propriété Content d'une page à une instance d'une autre page fonctionne même! Je déconseillerais vraiment cette solution à long terme. Si le contenu de la première page est dynamique en fonction de certaines conditions, utilisez plutôt UserControl s à la place.

Si les données du UserControl ne sont pas persistantes entre les appels à ShowForm, vous pouvez simplement créer une nouvelle instance à chaque fois et vous n'aurez plus le problème de re-parentalité.

Si vous pouvez élaborer sur votre scénario d'application et ce que vous essayez d'atteindre, alors nous pourrions être en mesure de fournir une meilleure réponse.

+0

J'ai défini le contenu du contrôle ContentPresenter d'une page sur une autre page, mais peu importe ce que j'ai défini ici, une page, stackpanel, usercontrol, l'exception est la même. La page de conteneur ne change pas, seul le contenu. J'utilise ceci, parce que créer des pages par programmation et les définir comme des sources de PhoneApplicationFrame ne fonctionnait pas (les barres d'applications n'étaient pas affichées en raison de l'absence d'utilisation de NavigationService). J'ai donc essayé de créer une page vide avec ContentPresenter, d'y naviguer et de changer son contenu. – Vic

+0

Y a-t-il une raison particulière pour laquelle vous n'utilisez pas les animations de pages normales? Si vous avez une logique qui tente de charger ces pages dans la propriété Content de la page en cours, alors vous pouvez utiliser 'this.NavigationService.Navigate (target);' où 'target' est la destination? –

+0

Non, parce que ma page est configurée dynamiquement, je ne peux pas utiliser un code .xaml pour cela, juste une instance de PhoneApplicationPage et cela n'est pas accepté par Navigate() comme paramètre. – Vic

Questions connexes