我在 tabcontrol 中添加了一些带有模板的选项卡:
<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 事件只触发一次。我希望在适当的选项卡中看到 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;
}
}
}
好像我用它更改选项卡内容模板开关。但行为不同。
这里发生了什么?为什么我的期望是错误的?