24

TabItem.Header をいくつかのフィールドから取得したバインディングに設定するにはどうすればよいですか。各バインディングは異なるサイズで表示され、すべて元のヘッダー テキストの代わりに表示されます。ヘッダーのデフォルトのスタイルと動作をオーバーライドすることなく、テキストのみが必要です。

テンプレートを設定しようとしましたが、内部コントロールを含む四角形を作成します。この四角形はユーザーのクリックに応答せず、コントロール スタイルもあります。このコントロールを非表示にして、テキストのみを表示する必要があります。 .

私は次のことを試しました:

<TabControl ItemsSource="{Binding}">
    <TabControl.ItemTemplate>
         <DataTemplate>
             <TabItem>
                 <TabItem.Header>
                     <MultiBinding StringFormat="{}{0}-{1}">
                         <Binding Path="Title"/>
                         <Binding Path="Category.Title"/>
                     </MultiBinding>
                 </TabItem.Header>
                 <TabItem.Content>
                     <TextBlock>
                         Here is what is gonna be in the TabItem - not header
                     </TextBlock>
                 </TabItem.Content>
             </TabItem>
         </DataTemplate>
    </TabControl.ItemTemplate>
</TabControl>

しかし、それは何も示していません。

また、HeaderTemplate を DataTemplate に設定しようとしましたが、DataTemplate が TabItem スタイルをオーバーライドし、テキストをクリックしてもクリックされたタブに移動しません。また、選択されていないタブが非常におかしいように見えます。テキストの四角形が浮かんでいますが、透明にしたいのです。

したがって、私の質問を要約すると、TabItem.Header.Text を StringFormat で MultiBinding に設定したいと思います。

4

1 に答える 1

68

TabControl には、ContentTemplate プロパティと、ItemsControl から継承する ItemTemplate が含まれています。ContentTemplate を使用してコンテンツ領域に表示される内容を区別し、ItemTemplate はヘッダーのテンプレートを定義します。さらに、ItemSource の各アイテムは自動的に TabItem にラップされます。お気づきのように、ヘッダー内に TabItem を配置しようとするため、ItemTemplate で再作成する必要はありません。

ItemTemplate 内で TabItem を再作成する代わりに、ItemTemplate を使用してヘッダー コンテンツを定義し、ContentTemplate を使用してコンテンツを定義します。

<TabControl ItemsSource="{Binding}">
    <TabControl.ItemTemplate>
        <DataTemplate>
            <TextBlock>
                <TextBlock.Text>
                    <MultiBinding StringFormat="{}{0}--{1}">
                        <Binding Path="Title" />
                        <Binding Path="Category.Title" />
                    </MultiBinding>
                </TextBlock.Text>
            </TextBlock>
        </DataTemplate>
    </TabControl.ItemTemplate>
    <TabControl.ContentTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding MyContent}" />
        </DataTemplate>
    </TabControl.ContentTemplate>
</TabControl>

最初の段落で、ヘッダーのバインドされた部分に異なるサイズを設定したいと述べました。それを行いたい場合は、上記のように単一の Binding または MultiBinding を使用して Text を設定することはできません。代わりに、TextBlocks をネストして、それぞれに異なる書式設定でこれを実現できます。

<TabControl.ItemTemplate>
    <DataTemplate>
        <TextBlock>
            <TextBlock Text="{Binding Title}"
                       FontSize="12" />
            <Run Text="--" />
            <TextBlock Text="{Binding Category.Title}"
                       FontSize="10" />
        </TextBlock>
    </DataTemplate>
</TabControl.ItemTemplate>
于 2009-12-08T23:38:29.587 に答える