1

テンプレートを含むいくつかのタブをタブコントロールに追加しました。

<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を変更すると、それに合わせて切り替わるようです。しかし、動作は異なります。

ここで何が起きてるの?なぜ私の期待は間違っているのですか?

4

1 に答える 1

2

参照する UpdateSelectedContent メソッドは、タイトルまたは読み込まれたハンドラーを設定しません。それらを TabItems の属性として指定するだけです。

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

于 2012-09-10T17:27:24.570 に答える