2012-03-11 21 views
1

私は、Windows Phoneアプリケーションで複数のWebブラウザインスタンスを開くことができるようにユーザーを作成したいと思いますが、これをどのように実現するかを説明するドキュメントは見つかりませんでした。より正確に言えば、既定のWindows Phone Internet Explorerアプリケーションで提供されているタブブラウジングエクスペリエンスを模倣したいと思います。 Aは既に1つのWebブラウザの不具合をナビゲーションなどで正しく処理していますが、複数の 'タブ付き'インスタンスを追加すると、各Webブラウザインスタンスが別々のページに同時に表示されます。 (私はC#とWindowsの電話に比較的新しいので、コード、リンク、詳細な説明は非常に高く評価されます。)事前に感謝!次のようにタブ付きウェブブラウザコントロール

私のコードは次のとおりです。

MainPage.xamlを

<Grid x:Name="LayoutRoot"> 

    <Grid.RowDefinitions> 
     <RowDefinition Height="Auto"/> 
     <RowDefinition Height="Auto"/> 
    </Grid.RowDefinitions> 

    <my:FullWebBrowser Name="TheBrowser" Grid.RowSpan="2" InitialUri="http://www.google.com" Height="800" Margin="0,0,0,-690" /> 

</Grid> 

TabsPage.xamlを

<Grid x:Name="ContentPanel" Grid.Row="0" Margin="12,0,12,0"></Grid> 
</Grid> 


<phone:PhoneApplicationPage.ApplicationBar> 
    <shell:ApplicationBar IsVisible="True"> 
     <shell:ApplicationBarIconButton IconUri="/Icons/appbar.new.rest.png" IsEnabled="True" Text="new" x:Name="NewBtn" Click="NewBtn_Click"/> 
       </shell:ApplicationBar> 
</phone:PhoneApplicationPage.ApplicationBar> 

今TabsPage.xamlができるようにすべきアプリバーのアイコンを除いて空白ですクリックすると新しいWebブラウザインスタンスが作成されます。

答えて

0

私はタブのために別々のページを作成しませんでしたが、最初に複数のブラウザコントロールを作成し、現在のタブのブラウザコントロールのみを表示します。

EDIT:

通常の誰もがこれを行うないだろうが、私はあなたのためのシンプルなマルチタブbrowserlikeアプリを書きました。非常に原始的ですが、あなたはそのアイデアを得るでしょう。ここで

<Grid x:Name="LayoutRoot"> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="Auto" /> 
     <RowDefinition Height="*" /> 
    </Grid.RowDefinitions> 
    <TextBox x:Name="UrlTextBox" 
      KeyDown="UrlTextBox_KeyDown" /> 
    <Grid x:Name="BrowserHost" 
      Grid.Row="1" /> 
</Grid> 

<phone:PhoneApplicationPage.ApplicationBar> 
    <shell:ApplicationBar> 
     <shell:ApplicationBar.MenuItems> 
      <shell:ApplicationBarMenuItem Text="1" 
              Click="TabMenuItem_Click" /> 
      <shell:ApplicationBarMenuItem Text="2" 
              Click="TabMenuItem_Click" /> 
      <shell:ApplicationBarMenuItem Text="3" 
              Click="TabMenuItem_Click" /> 
      <shell:ApplicationBarMenuItem Text="4" 
              Click="TabMenuItem_Click" /> 
     </shell:ApplicationBar.MenuItems> 
    </shell:ApplicationBar> 
</phone:PhoneApplicationPage.ApplicationBar> 

MainPage.xaml.csです:

public partial class MainPage : PhoneApplicationPage 
{ 
    private const int NumTabs = 4; 

    private int currentIndex; 
    private string[] urls = new string[NumTabs]; 
    private WebBrowser[] browsers = new WebBrowser[NumTabs]; 

    public MainPage() 
    { 
     InitializeComponent(); 
     ShowTab(0); 
    } 

    private void ShowTab(int index) 
    { 
     this.currentIndex = index; 
     UrlTextBox.Text = this.urls[this.currentIndex] ?? ""; 
     if (this.browsers[this.currentIndex] == null) 
     { 
      WebBrowser browser = new WebBrowser(); 
      this.browsers[this.currentIndex] = browser; 
      BrowserHost.Children.Add(browser); 
     } 
     for (int i = 0; i < NumTabs; i++) 
     { 
      if (this.browsers[i] != null) 
      { 
       this.browsers[i].Visibility = i == this.currentIndex ? Visibility.Visible : Visibility.Collapsed; 
      } 
     } 
    } 

    private void UrlTextBox_KeyDown(object sender, KeyEventArgs e) 
    { 
     if (e.Key == Key.Enter) 
     { 
      Uri url; 
      if (Uri.TryCreate(UrlTextBox.Text, UriKind.Absolute, out url)) 
      { 
       this.urls[this.currentIndex] = UrlTextBox.Text; 
       this.browsers[this.currentIndex].Navigate(url); 
      } 
      else 
       MessageBox.Show("Invalid url"); 
     } 
    } 

    private void TabMenuItem_Click(object sender, EventArgs e) 
    { 
     int index = Int32.Parse(((ApplicationBarMenuItem)sender).Text) - 1; 
     ShowTab(index); 
    } 
} 
+0

おかげところであなたは解決策を考え出すために難しくしようとする必要があり、これはハード本当に...ここでMainPage.xamlをがあるではありません@Kylerrr私はあなたが何を示唆しているのか理解していると信じていますが、私はその解決策をどのように実装するか考えていません。上記の元の投稿を編集してより多くの情報を追加しました。どのくらい正確にTabsPage.xamlアプリケーションバーボタンのクリックイベントを新しいWebブラウザーコントロールを作成して、以前のWebブラウザーコントロール(および各追加されたコントロール間で切り替える)上の新しいブラウジングインスタンスとして表示しますか?いくつかのサンプルコードを含めることで、あなたのソリューションを試してみることができますか?再度、感謝します。 – Matthew

+0

あなたの編集は私が正しいプロセスを理解する助けになるはずです。タブの数に応じてブラウザの新しいインスタンスを最適に作成する方法はわかりませんでしたが、URLとWebbrowserコントロールの単純な配列showtabメソッドも私が問題を抱えていたものでした。ありがとう、私はあなたが私が持っているように有益なあなたのソリューションを見つけることを願って、私が理解することができる条件で入れていただきありがとう! – Matthew

+0

タブブラウズサンプルを2つの別々のページ(現在のブラウジングインデックス(MainPage.xaml)を表示しているページと、現在のブラウザの作成と選択を制御する別のページ)に分けるように試みましたが、これを達成するために2つのページ間のデータ?これらの2つのページ間のロジックを分離する最良の方法として何をお勧めしますか?私はTabsPage.xamlにロジックの大半を置き、MainPage.xamlに選択したブラウザのインデックスを表示しようとしています。 – Matthew