我正在尝试制作一个选项卡式浏览器代码示例,但我无法正确实现解决方案。我创建了一个自定义类BrowserItem
,它有两个值,我的自定义 Web 浏览器和一个 url 字符串。然后,我创建了一个 BrowserItem 类型的 ObservableCollection,在其中我在单击事件时将新项目添加到 ObservableCollection。但是,由于某种原因,当我ShowTab
在 MainPage 中调用我的方法以显示用户选择的 Web 浏览器实例(从由 ObservableCollection 填充的 ListBox 中)时,我得到了一个 ArgumentOutOfRange 异常。为了说明,我到目前为止的内容如下:
浏览器项.cs
public FullWebBrowser browser
{
get;
set;
}
public string url
{
get;
set;
}
设置.cs
public static Setting<ObservableCollection<BrowserItem>> Browsers = new Setting<ObservableCollection<BrowserItem>>("Browsers", new ObservableCollection<BrowserItem>());
上面的 Setting 类从隔离存储中保存并获取 ObservableCollection。
MainPage.xaml.cs
private void ShowTab(int index)
{
this.currentIndex = index;
//Settings.Browsers.Value.ElementAt(currentIndex); //ArgumentOutOfRange exception
int count = Settings.Browsers.Value.Count;
if (count <= 0)
{
FullWebBrowser browser = new FullWebBrowser();
browser.InitialUri = "http://www.bing.com";
BrowserItem Browser = new BrowserItem();
Browser.browser = browser;
Browser.url = browser.InitialUri;
Settings.Browsers.Value.Add(Browser);
BrowserHost.Children.Add(Browser.browser);
}
//SearchBar.Text = Settings.Browsers.Value.ElementAt(currentIndex).url ?? "";
if (Settings.Browsers.Value.ElementAt(currentIndex) == null) //ArgumentOutOfRangeException
{
FullWebBrowser browser = new FullWebBrowser();
browser.InitialUri = "http://www.bing.com";
BrowserItem Browser = new BrowserItem();
Browser.browser = browser;
Browser.url = browser.InitialUri;
Settings.Browsers.Value.Add(Browser);
BrowserHost.Children.Add(Browser.browser);
}
for (int i = 0; i < Settings.Browsers.Value.Count; i++)
{
if (Settings.Browsers.Value.ElementAt(i) != null)
{
Settings.Browsers.Value.ElementAt(i).browser.Visibility = i == this.currentIndex ? Visibility.Visible : Visibility.Collapsed;
}
}
}
ArgumentOutOfRangeException 首先出现Settings.Browsers.Value.ElementAt(currentIndex);
在ShowTab
方法中,其他任何地方都包含相同的语句。我只想在 MainPage 的 ObservableCollection 中显示相应索引值的 webbrowser。