0

のビューの仮想化でさまざまな問題が発生していTabControlます。幸いなことに、この CodeProject の記事で、すべての問題を解決できると思われるものを見つけました。

ただし、このソリューションによって 1 つの問題が発生します。それは、HeaderTemplate. タブ ヘッダーには、コンテンツ コントロールと同じコンテンツがあります。

私のビューは、次のような TabControl を使用します。

<TabControl
        behaviors:TabItemGeneratorBehavior.ItemsSource="{Binding MyItems, Mode=OneWay}"
        behaviors:TabItemGeneratorBehavior.SelectedItem="{Binding MySelectedItem, Mode=TwoWay}">

    <TabControl.Resources>
        <Style TargetType="TabItem">
            <Setter Property="HeaderTemplate">
                <Setter.Value>
                    <DataTemplate>
                        <ContentPresenter>
                            <ContentPresenter.Content>
                                <TextBlock Text="{Binding Title}"/>
                            </ContentPresenter.Content>
                        </ContentPresenter>
                    </DataTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </TabControl.Resources>
</TabControl>

これbehaviors:TabItemGeneratorBehaviorは CodeProject の記事からのものです。内部にTabItemGeneratorBehaviorは、次を生成するメソッドがありますTabItems

private void AddTabItem(object item)
{
    var contentControl = new ContentControl();
    var tab = new TabItem
        {
            DataContext = item,
            Content = contentControl,
            HeaderTemplate = _tabControl.ItemTemplate
        };

    contentControl.SetBinding(ContentControl.ContentProperty, new Binding());
    tab.SetBinding(HeaderedContentControl.HeaderProperty, new Binding());

    _tabControl.Items.Add(tab);
}

私の問題は、のバインディングを設定する行にあると思いますHeaderPropertyHeaderTemplate上記の XAML で定義されたものを使用するようにバインディングを設定するにはどうすればよいですか?

4

1 に答える 1

0

OPはこちら。

HeaderTemplate解決策は、作成時に割り当てを削除することTabItemです:

var tab = new TabItem
    {
        DataContext = item,
        Content = contentControl,
        // HeaderTemplate = _tabControl.ItemTemplate
    };
于 2014-05-09T06:12:48.973 に答える