我一直在嘗試將單個WP7應用程序頁面分隔爲兩個獨立的頁面,以便我可以將功能保留在一個頁面中,並將視圖保存在另一個頁面中。基本上,我創建了一個標籤式瀏覽器,其中有不同的標籤,可以根據用戶請求查看,只有當前點擊的標籤是顯示在視圖中的標籤。到目前爲止,我有一個解決方案,它可以在一個頁面上工作,但我想將它分離成一個TabsPage(它將控制標籤實例)和一個MainPage(它會向用戶顯示當前選擇的標籤)。我不確定如何正確分離這兩個頁面,以便我可以完成此功能。我有如下(其中迄今作品)正確地在頁面之間傳遞數據
MainPage.xaml中
<Grid x:Name="LayoutRoot" Background="Transparent">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<TextBox x:Name="UrlTextBox" KeyDown="UrlTextBox_KeyDown" InputScope="url"/>
<Grid x:Name="BrowserHost" Grid.Row="1" />
<!--<my:FullWebBrowser Name="TheBrowser" Grid.Row="1"/>-->
</Grid>
<phone:PhoneApplicationPage.ApplicationBar>
<shell:ApplicationBar>
<shell:ApplicationBarIconButton x:Name="Tabs" IconUri="/Images/appbar.tab.rest.png" Text="tabs" Click="TabsPage_Click"/>
<shell:ApplicationBarIconButton IconUri="/Images/appbar.next.rest.png" IsEnabled="True" Text="forward" x:Name="ForwardBtn" Click="ForwardBtn_Click"/>
<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中
private const int NumTabs = 4;
private int currentIndex;
private string[] urls = new string[NumTabs];
////private WebBrowser[] browsers = new WebBrowser[NumTabs];
private FullWebBrowser[] browsers = new FullWebBrowser[NumTabs];
// Constructor
public MainPage()
{
InitializeComponent();
ShowTab(0);
}
//protected override void OnNavigatedTo(NavigationEventArgs e)
//{
// base.OnNavigatedTo(e);
//}
private void ShowTab(int index)
{
this.currentIndex = index;
UrlTextBox.Text = this.urls[this.currentIndex] ?? "";
if (this.browsers[this.currentIndex] == null)
{
//WebBrowser browser = new WebBrowser();
FullWebBrowser browser = new FullWebBrowser();
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;
//string _url;
if (Uri.TryCreate(UrlTextBox.Text, UriKind.Absolute, out url))
{
this.urls[this.currentIndex] = UrlTextBox.Text;
//_url = url.ToString();
string _url = url.ToString();
//this.browsers[this.currentIndex].Navigate(url);
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);
}
//**********************************************************************
private void TabsPage_Click(object sender, EventArgs e)
{
this.NavigationService.Navigate(new Uri("/TabsPage.xaml", UriKind.Relative));
}
注:我使用一個名爲TheWebBrowser WebBrowser控件。 任何關於如何正確地將MainPage分隔成TabsPage的幫助都將不勝感激!我一直在研究這一段時間,似乎無法在頁面之間正確傳遞數據(命名爲搜索欄和在MainPage上查看當前Webbrowser實例)。
謝謝@singelabs,你能告訴我如何使用,我從來沒有使用App.Current作爲應用程序之前?另外,如果只通過查詢字符串在兩頁之間傳遞數據來實現這一點,會不會有更簡單的方法? – Matthew 2012-04-11 23:42:44