テンプレートを含むいくつかのタブをタブコントロールに追加しました。
<sdk:TabControl x:Name="TabControl">
<sdk:TabItem Header="Header1" Content="{Binding Path=Content}">
<sdk:TabItem.ContentTemplate>
<DataTemplate>
<TextBlock Text="Header1" Loaded="TextBlock_Loaded" />
</DataTemplate>
</sdk:TabItem.ContentTemplate>
</sdk:TabItem>
<sdk:TabItem Header="Header2" Content="{Binding Path=Content}">
<sdk:TabItem.ContentTemplate>
<DataTemplate>
<TextBlock Text="Header2" Loaded="TextBlock_Loaded" />
</DataTemplate>
</sdk:TabItem.ContentTemplate>
</sdk:TabItem>
<sdk:TabItem Header="Header3" Content="{Binding Path=Content}">
<sdk:TabItem.ContentTemplate>
<DataTemplate>
<TextBlock Text="Header3" Loaded="TextBlock_Loaded" />
</DataTemplate>
</sdk:TabItem.ContentTemplate>
</sdk:TabItem>
</sdk:TabControl>
タブを切り替えると、すべてのタブに「Header1」のみが表示され、Loadedイベントが1回だけ発生します。適切なタブにHeader1、Header2、Header3が表示され、ロードされた3つのイベントを処理することを期待していました。
TabControlのコードを逆コンパイルしたところ、そのようなメソッドが見つかりました。
private void UpdateSelectedContent(object content)
{
TabItem selectedItem = this.SelectedItem as TabItem;
if (selectedItem != null)
{
ContentPresenter contentHost = this.GetContentHost(this.TabStripPlacement);
if (contentHost != null)
{
contentHost.HorizontalAlignment = selectedItem.HorizontalContentAlignment;
contentHost.VerticalAlignment = selectedItem.VerticalContentAlignment;
contentHost.ContentTemplate = selectedItem.ContentTemplate;
contentHost.Content = content;
}
}
}
タブのcontenttemplateを変更すると、それに合わせて切り替わるようです。しかし、動作は異なります。
ここで何が起きてるの?なぜ私の期待は間違っているのですか?