2012-03-04 4 views
0

私はこの問題に問題があったので、助けが必要です。親プロジェクトの外部に定義されたユーザーコントロールを実装している親プロジェクトがあります。 FullWebBrowserという名前のユーザーコントロール(Webブラウザーコントロール)が正しく機能しているMainPage.xamlに読み込まれますが、このユーザーコントロールの新しいインスタンスを親プロジェクトの別のページ(NavigatedToからMainPage.xaml)。親プロジェクトのユーザーコントロールクラスの新しいインスタンスを作成していない

MainPage.xamlを

<Grid x:Name="ContentPanel" Grid.Row="0"> 
     <my:FullWebBrowser Name="TheBrowser" InitialUri="http://www.google.com" /> 
    </Grid> 

FullWebBrowserを今すぐ「TheBrowser」という名前FullWebBrowserコントロールのナビゲーションやその他もろもろを制御MainPage.xamlをだけでなく、正常に動作している次のように は、クイックリファレンスのために私のコードですMainPage.xaml.csでの使用方法 何らかの理由で、私は、SharePage.xamlのように、MainPage.xamlからナビゲートされている他のページでTheBrowserを呼び出すことはできません。なぜそうですか、これらの他のページで使用するためにTheBrowserというFullWebBrowserにアクセスする方法はありますか?

この問題を回避するために、私はSharePageコードの背後にFullBrowserControlの新しいインスタンスを作成しようとしました、そして、それを「ブラウザ」という名前にしました。注意するには、SharePageの目的は、既定のWindows Phone Internet Explorer共有ページのメニュー項目オプションを模倣して、ユーザーが電子メール、テキスト、またはソーシャルネットワークを通じて現在のWebページのURLを共有できるようにすることです。

SharePage.xaml.cs

public partial class SharePage : PhoneApplicationPage 
{ 
    //new instance of FullWebBrowser 
    FullWebBrowser browser = new FullWebBrowser();   

    public SharePage() 
    { 
     InitializeComponent(); 
    } 

    private void SocialNetworks_Click(object sender, RoutedEventArgs e) 
    { 
     ShareLinkTask shareLinkTask = new ShareLinkTask(); 

     Uri shareUrl = new Uri(browser.currentUrl()); 

     shareLinkTask.Title = "Shared Link!"; 
     shareLinkTask.LinkUri = shareUrl; 
     shareLinkTask.Message = "Check out this link!"; 

     shareLinkTask.Show(); 
    } 

    private void Messaging_Click(object sender, RoutedEventArgs e) 
    { 
     SmsComposeTask smsComposeTask = new SmsComposeTask(); 

     Uri shareUrl = new Uri(browser.currentUrl()); 

     smsComposeTask.To = ""; 
     smsComposeTask.Body = "Check out this link! " + shareUrl; 

     smsComposeTask.Show(); 
    } 

    private void Email_Click(object sender, RoutedEventArgs e) 
    { 
     EmailComposeTask emailComposeTask = new EmailComposeTask(); 

     Uri shareUrl = new Uri(browser.currentUrl()); 

     emailComposeTask.Subject = "Link share from Quest internet browser"; 
     emailComposeTask.Body = "Check out this link! " + shareUrl; 
     emailComposeTask.To = ""; 
     emailComposeTask.Cc = ""; 
     emailComposeTask.Bcc = ""; 

     emailComposeTask.Show(); 
    } 
} 

私は各SharePage.xaml.csからコードを取る際にクリックのでSharePage.xaml.csにFullWebBrowserの新しいインスタンスを作成すると、正しく動作していないようですMainPage.xaml.csに配置し、SharePage.xaml.csに名前が付けられているように 'browser'ではなく、MainPage.xamlに指定されているようにFullBrowserNameを 'TheBrowser'に変更します)、すべて正常に動作しています。私は適切にusercontrolの新しいインスタンスを作成していませんか、私は正しくSharePageアクションを実行させる何かをしている必要がありますか?

答えて

1

別のページに移動すると、最初のページは使用できなくなります。

ページ間に渡したい詳細がある場合は、これをナビゲーションプロセスの一部として(クエリ文字列内で)実行する必要があります。あるいは、Appオブジェクト、静的オブジェクト、またはすべての必要なページで使用できるようにインスタンス化された別のオブジェクトなど、グローバルにアクセス可能な場所に格納する必要があります。


SharePageは、ブラウザの新しいインスタンスを持っているので、他のページ上のインスタンスに設定されたプロパティにアクセスすることはできません。あなたはbrowserAからの値であることを行っていないbrowserBInitialUriを試してみて、照会する場合

var browserA = new WebBrowser { InitialUri = "http://stackoverflow.com/" }; 
var browserB = new WebBrowser(); 

:それはこのようなものです。あなたのシナリオに基づいて

a)は、ユーザーがメインページ上のWebブラウザーの中に閲覧します。
b)ユーザーがMainPageの「共有」ボタンをタップします。
c)共有の方法を選択するためにSharePageに移動します。
d)ユーザーが共有の方法を選択し、リンクが共有されています。

ステップbで行う必要があるのは、ナビゲーションを行うときに「currentUrl」を渡すことです。 MainPage.xaml.cs

:ような何かSharePage.xaml.csで次に

NavigtionService.Navigate(new Uri("SharePage.xaml?curUrl=" 
            + HttpUtility.UrlEncode(browser.CurrentlUrl()))); 

string urlToShare; 

protected override void OnNavigatedTo(....) 
{ 
    NavigationContext.QueryString.TryGetValue("curUrl", out urlToShare); 
} 

あなたは、あなたのSocialNetworks_ClickSocialNetworks_Click方法でurlToShareを使用することができます。

はい、これを行うには他の方法もありますが、これはおそらく自分が何をしようとしているのかを理解した上で最も簡単です。

+0

@Matt_Laceyだから、私のSharePage.xaml.csでこの外部ユーザコントロールの新しいインスタンスを作成しても、SharePage.xaml.csコードの同じ機能にアクセスすることはできません私のMainPage.xaml xamlコードへの外部ユーザーコントロールそれは私には混乱しています。もしそうなら、(たとえ私がMainPage.xamlで定義されていても、そのページ上のWebブラウザをレンダリングする場合でも)この外部ユーザコントロールをどのようにしてすべてのページで使用できるようにインスタンス化する必要がありますか?途中であなたの応答をありがとう! – Matthew

+0

@Matthew "SharePage"に新しいインスタンスを作成すると、それは同じコントロールにならないので、そのプロパティにアクセスしようとすると無意味になります。私の答えを更新して広げてください。 –

+0

@Matt_Laceyその実装は素晴らしいです! URLを渡さないwebbrowserコントロールの新しいインスタンスを作成し、currentUrl()メソッドを渡すためのクエリー・ストリングの実装について、これらの用語で説明することに本当に感謝します。ありがとう! – Matthew

関連する問題