Я пытаюсь сделать образец кода браузера с вкладками, но у меня возникают проблемы с правильным внедрением решения. Я создал собственный класс BrowserItem
, который имеет два значения: мой собственный веб-браузер и строку URL. Затем я создал ObservableCollection типа BrowserItem, в котором я добавляю новые элементы в ObservableCollection по событию щелчка. Однако по какой-то причине, когда я вызываю свой метод ShowTab
на моей главной странице, чтобы показать экземпляр веб-браузера, который выбирает пользователь (из ListBox, заполненного ObservableCollection), я получаю исключение ArgumentOutOfRange. Чтобы проиллюстрировать, то, что у меня есть до сих пор, выглядит следующим образом:
BrowserItem.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
и везде, где содержится один и тот же оператор. Я просто хотел бы показать веб-браузеру соответствующее значение индекса в ObservableCollection в MainPage.
if (Settings.Browsers.Value.ElementAt(currentIndex) == null)
. Пользователю разрешено добавлять элемент в событие щелчка на другой странице, и я передаю вновь созданное значение индекса коллекции на мою главную страницу, и оттуда я должен проверить, содержит ли это значение индекса BrowserItem, и если не добавить ни одного. - person Matthew   schedule 23.09.2012