我在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>
如果我在标签之间切换,我在所有标签中只看到“标题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;
}
}
}
好像我用它更改了tab contenttemplate开关。但行为不同。
这里发生了什么?为什么我的期望是错的?
答案 0 :(得分:2)
您引用的UpdateSelectedContent方法不设置标题或加载的处理程序。只需将它们指定为TabItems的属性。
<sdk:TabItem Header="Header 1" Loaded="Tab1_Loaded">
等