2011-01-20 4 views
0

ContentPresenter(PageContentという名前)のページ(containerpageという名前)を使用し、そのコンテンツをページのOnNavigatedTo()イベントハンドラのPhoneApplicationPageインスタンス(contentpage)に設定します。私はまた、 "ショーフォーム"ボタンを持つメインページを持っています。そのボタンをクリックすると、プログラムはコンテンツページに移動し、コンテンツプレゼンターのコンテンツをコンテンツページに設定します。私の問題は次のとおりです。私は、「ショーの形式」をクリックし、再度ボタンを押すと、再び「ショーフォーム」をクリックした場合、私はテキストwp7 contentpresenter - 同じページにコンテンツを設定する

とArgumentExceptionがを得る

「パラメータが間違っています」ラインcontainerpageの OnNavigatedTo()のEventHandlerで

this.PageContent.Content = contentpage; 

。これは、すでに別のContentPresenterのコンテンツをこのコンテンツページに設定しているためです(ナビゲーションは新しいページを作成するためです)。これが問題であれば、以前のContentPresenterのコンテンツからコンテンツページをどのように割り当て解除できますか?

+1

ここにXAMLとコードビハインドコードを投稿した方が良いでしょう。完全な例外の詳細を投稿する。 – decyclone

+0

あなたはそれの中に別のページを持ったページを持っていますか?(PhoneApplicationPAge-> contentpresenter-> PhoneApplicationPage?)混乱しているようで、あなたの期待どおりに動作しないかもしれません... –

答えて

0

decycloneが述べたように、あなたの質問は詳細なコードではっきりと分かります。つまり、コンビニエンスページにOnNavigatedFrom()を実装し、Contentnullに設定するとします。

アプリがコンテナーページでトゥーンストーンになった場合、このデザインがどのように成立するかを考えてみてください。

+0

ここにContentPage ContentPresenter): – Vic

+0

保護されたオーバーライドvoid OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs e) { base.OnNavigatedFrom(e); this.PageContent = null; this.DataContext = null; this.Content = null; } – Vic

+0

保護されたオーバーライドvoid OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e) { base.OnNavigatedTo(e); string contentID; (NavigationContext.QueryString.TryGetValueコンテンツIDアウト( "コンテンツID"、)) { 場合(PhoneApplicationService.Current.State [ "コンテンツ" +コンテンツID]!= NULL){ は { ページページ= PhoneApplicationServiceをしようとした場合。 Current.State ["content" + "contentID]"をページとして使用します。 this.PageContent。コンテンツ=ページ; }キャッチ(ArgumentExceptionがのEX) {} UpdateLayout()。 } } } – Vic

0

正直言って、あるページのContentプロパティを別のページのインスタンスに設定しても動作することに驚いています。私は本当にそれを長期的な解決策として勧告します。最初のページの内容が何らかの条件に基づいて動的である場合は、別のUserControlを使用してください。

UserControlのデータがShowFormへの呼び出しの間に永続的でない場合は、毎回新しいインスタンスを作成するだけで、再親子化の問題は発生しません。

アプリケーションのシナリオと達成しようとしていることを詳しく説明できれば、より良い回答が得られるかもしれません。

+0

は、私は別のページに1ページのContentPresenterコントロールの内容を設定しますが、関係なく、私は、こちらのページ、のStackPanel、ユーザーコントロールを設定したもの、例外は同じではありません。コンテナページは変更されず、コンテンツのみが変更されます。プログラムを使ってページを作成し、PhoneApplicationFrameのソースとして設定すると、NavigationServiceを使用しないためにアプリケーションバーが表示されないため、これを使用しています。その代わりに、私はContentPresenterで空のページを1つ作成しようとしました。そのページに移動し、コンテンツを変更します。 – Vic

+0

通常のページアニメーションを使用しない理由は何ですか?これらのページを現在のページのContentプロパティにロードしようとするロジックがある場合は、必ず 'this.NavigationService.Navigate(target);' 'target''を目的地として使用できますか? –

+0

いいえ、自分のページが動的に設定されているため、PhoneApplicationPageインスタンスだけで、.xamlコードを使用することはできません。またNavigate()によってパラメータとして受け入れられません。 – Vic

関連する問題