0

我正在尝试制作一个选项卡式浏览器代码示例,但我无法正确实现解决方案。我创建了一个自定义类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。

4

1 回答 1

0

您需要从某个地方以某种方式将项目添加到集合中。应该有一些代码,如

 Settings.Browsers.Value.Add(browserItemInstanceHere);

或者

 Settings.Browsers.Value = getSomeBrowserCollections();

您无法从空集合中获取项目,并且您的索引不得大于Count-1

于 2012-09-23T04:20:42.597 回答