0

タブ付きのブラウザコードサンプルを作成しようとしていますが、ソリューションを正しく実装するのに問題があります。BrowserItemカスタムWebブラウザとURL文字列の2つの値を持つカスタムクラスを作成しました。次に、タイプBrowserItemのObservableCollectionを作成しました。ここで、クリックイベントでObservableCollectionに新しいアイテムを追加します。ただし、何らかの理由ShowTabで、MainPageでメソッドを呼び出してユーザーが(ObservableCollectionによって入力されたListBoxから)選択したWebブラウザーインスタンスを表示すると、ArgumentOutOfRange例外が発生します。説明のために、私がこれまでに持っているものは次のとおりです。

BrowserItem.cs

public FullWebBrowser browser
    {
        get;
        set;
    }

    public string url
    {
        get;
        set;
    }  

Settings.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;
            }
        }
    }

ArgumentOutOfRangeExceptionSettings.Browsers.Value.ElementAt(currentIndex);は、ShowTabメソッド内で最初に発生し、他のすべての場所で同じステートメントが含まれています。MainPageのObservableCollectionに対応するインデックス値のウェブブラウザを表示したいと思います。

4

1 に答える 1

0

どこかからコレクションにアイテムを追加する必要があります。次のようなコードがあるはずです

 Settings.Browsers.Value.Add(browserItemInstanceHere);

また

 Settings.Browsers.Value = getSomeBrowserCollections();

空のコレクションからアイテムを取得することはできません。また、インデックスは以下でなければなりません。Count-1

于 2012-09-23T04:20:42.597 に答える