TabControl不明显的行为

时间:2012-09-10 17:07:35

标签: silverlight tabcontrol

我在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开关。但行为不同。

这里发生了什么?为什么我的期望是错的?

1 个答案:

答案 0 :(得分:2)

您引用的UpdateSelectedContent方法不设置标题或加载的处理程序。只需将它们指定为TabItems的属性。

 <sdk:TabItem Header="Header 1" Loaded="Tab1_Loaded">