2011-02-17 6 views
3

ユーザーコントロールからナビゲーションサービスを呼び出すことができません。 私は、メインページ上に1つのイベントハンドラを作成して、動作していないラオスのナビゲーションサービスを呼び出す場合でも、win7の電話機でユーザーコントロールからのナビ

私を助けてもらえますか?

+1

あなたが使用しているコードを表示し、何がうまくいかないかを説明してください - 例外がスローされていますか?それは単に静かにナビゲートしていませんか? –

答えて

7

は、私は問題を参照してくださいと思うが、オースティンが示されているように、あなたの最初の説明で上に行くことがあまりありません。そのページに配置しているUserControl内からNavgationService(これはPhoneApplicationPageプロパティ)にアクセスしようとしているようです。

これらのAPIの多くの機能と同様に、いくつかのオプションがあります。まず、あなたがPhoneApplicationFrameにアクセスすることができます(あなたのページが含まれているとナビゲーションを管理する)とナビゲーションのためにそれを使用します。また

var frame = App.Current.RootVisual as PhoneApplicationFrame; 
frame.Navigate(new Uri("/TargetPage.xaml", UriKind.Relative)); 

あなたが含まれているページに到達するまで、あなたはVisualTreeHelperを使用して、コントロールのビジュアルツリーを歩くことができます。

var page = GetParentOfType<PhoneApplicationPage>(this); // this is your user control 


private static T GetParentOfType<T>(DependencyObject item) where T : DependencyObject 
{ 
    if (item == null) throw new ArgumentNullException("item"); 
    T result; 
    var parent = VisualTreeHelper.GetParent(item); 
    if (parent == null) return null; 
    else if (parent.GetType().IsSubclassOf(typeof(T)) 
    { 
      result = (T)parent; 
    } 
    else result = GetParameterOfType<T>(parent); 
    return result; 
} 

ご覧のとおり、VisualTreeのアプローチは、より多くのコードが含まれていますが、あなたがNavigationContextのようなものへのより多くのアクセスを持っている含むページオブジェクトを、取得する、など

ホープ・ワットというあなたの質問(とあなたの答え)として

+0

3歳でしたが、これはまだ私をたくさん助けました:)ありがとう! – ecth

関連する問題