メインページのグリッドに、コードビハインドで追加されたWebブラウザアイテムを入力しようとしています。何らかの理由で、どの要素がすでに追加されているかをグリッドに記憶させることができません。MainPageに移動した後、戻ったときに、グリッドが以前に追加された値を認識できるように、この情報を保存する方法がわかりません。よりよく説明するために、私が持っているものは次のとおりです。
MainPage.xaml
<Grid x:Name="BrowserHost" Grid.Row="1">
//Items will be added in code behind
</Grid>
MainPage.xaml.cs
private void ShowTab(int index)
{
this.currentIndex = index;
int count = Settings.BrowserList.Value.Count;
if (count <= 0)
{
MessageBox.Show("count <= 0");
}
if (currentIndex <= (count - 1)) //in correct range
{
// BrowserHost does not remember previously added children elements added previously when navigated back to this page and performing this check
if(!BrowserHost.Children.Contains(Settings.BrowserList.Value[currentIndex].Browser))
//Attempt to add browser if it was already added previously throws InvalidOperationException
BrowserHost.Children.Add(Settings.BrowserList.Value[currentIndex].Browser);
}
if (currentIndex > (count - 1))
{
MessageBox.Show("currentIndex > (count - 1)");
}
for (int i = 0; i < Settings.BrowserList.Value.Count; i++)
{
if (Settings.BrowserList.Value.ElementAt(i) != null)
{
Settings.BrowserList.Value.ElementAt(i).Browser.Visibility = i == this.currentIndex ? Visibility.Visible : Visibility.Collapsed;
}
}
}
基本的に、このShowTab
メソッドは、MainPageがロードされるたびに特定のインデックス値で呼び出されます。リストのcurrentIndexに(Webブラウザーインスタンスを含むコレクション)が存在するかどうかを確認するためのチェックが実行されますSettings.BrowserList.Value[currentIndex].Browser
(これらは別のページに追加されます)。MainPageのBrowserHost
グリッドに特定のインデックスを持つ子要素(ブラウザ)がすでに含まれている場合は、チェックをスキップして、そのブラウザインスタンスを画面に表示し続ける必要があります。これは基本的に、私が作成したカスタムWebブラウザーコントロールのタブブラウジングシナリオを実装することになっています。私の問題は、新しいブラウザを連続して追加できることですBrowserHost
画面に表示しますが、コレクション内の特定のインデックスで以前に追加したWebブラウザーを呼び出そうとすると、InvalidOperationExceptionが発生します。これをどのように修正しますか?私のデバッグではShowTab
、ブラウザが追加されているかどうかを確認すると、追加されているかどうかに関係なく、そのブラウザをBrowserHost
子要素に追加しようとするとジャンプすることが示されています。ブラウザが以前に作成されている場合は、InvalidOperationExceptionが発生します。