1

我在 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;
        }
    }
}

好像我用它更改选项卡内容模板开关。但行为不同。

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

4

1 回答 1

2

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

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

ETC

于 2012-09-10T17:27:24.570 回答