我正在制作多标签浏览器并遇到了一些问题。我希望当用户使用按钮添加新标签时,他们然后选择导航到的每个网站都会更新到标签网址。因此,如果用户更改了标签或打开了新标签,那么如果它们返回到上一个标签页,则会保存最后一个网站。
以下是创建新标签时的代码&从创建的选项卡中选择选项卡
private void addNewTab(string url)
{
TabEntry urlObj = new TabEntry();
urlObj.URL = url;
urlObj.timestamp = DateTime.Now.ToString("HH:mm");
if (url.Contains("/"))
{
urlObj.Name = url.Remove(url.IndexOf('/'));
}
else
{
urlObj.Name = url.Remove(url.IndexOf('.'));
}
tabs.Insert(0, urlObj);
listBoxTabPage.ItemsSource = null;
listBoxTabPage.ItemsSource = tabs;
Browser.Navigate(new Uri("http://www.google.com", UriKind.Absolute));
//selectedTab = listBoxTabPage.SelectedValue as TabEntry;
}
private void ListBoxTabPage_SelectionChanged(object sender, GestureEventArgs e)
{
selectedTab = listBoxTabPage.SelectedValue as TabEntry;
Browser.Navigate(new Uri("http://www." + selectedTab.URL, UriKind.Absolute));
PivotItems.SelectedItem = BrowserPage;
}
以下是应在Browser_Navigated方法中更新所选标签网址的代码
void Browser_Navigated(object sender, System.Windows.Navigation.NavigationEventArgs e)
{
_deactivatedURL = e.Uri;
_progressIndicator.IsVisible = false;
string url = Convert.ToString(e.Uri);
//selectedTab.URL = url;
addHistoryRecord(url);
}
如果它被评论出来,我认为是问题所在。我相信代码不知道哪个是selectedTab。要修复此错误,我应该每次浏览器导航时创建一个更新选项卡网址的方法。该程序如何知道当前正在使用哪个选项卡。
如果您需要更多详细信息,请发表评论,我将很乐意进一步详细解释。
答案 0 :(得分:2)
在将标签设置为listBoxTabPage.ItemsSource = null
之前,您只需设置ItemsSource
即可。它可能会清除您的listBoxTabPage.SelectedValue
。
我认为你可以在listBoxTabPage.SelectedValue = urlObj
中设置addNewTab()
。
然后您开始导航到ListBoxTabPage_SelectionChanged
中的新uri,但是您只需将前缀字符串http://www.
附加到完整网址似乎是错误的。如果您导航到不存在的网站,它可能会触发NavigateFailed
事件。
Browser.Navigate(new Uri("http://www." + selectedTab.URL, UriKind.Absolute));
更重要的是,ListBoxTabPage_SelectionChanged
可能会触发两次,因为旧值已清除并且新值已设置。