2009-03-27 32 views
0

ControlTemplateとDataTemplateの両方を同時に使用する必要があります。ControlTemplateとDataTemplateの両方を使用してTabItemを指定する方法

私はTabControlを持っています。TabItemはObservableCollectionによって提供されています - 私は選択したObservableCollectionアイテムを設計できます。

TabItemは、選択された状態、選択されていない状態、無効な状態のため、状態を切り替えるイベントトリガーが必要なため、ControlTemplateを使用する必要があります - 選択されたタブにはオレンジ色のガラスボタンがあり、青いガラスのボタン。各タブにはそれぞれのガラスボタンの内側にあるアイコン(画像)と、タブごとに異なるObservableCollectionによって提供されるタブラベルが必要です。

私が正しく理解している場合は、ControlTemplateまたはDataTemplateを使用できますが、両方を同じビジュアルツリーレベルで使用することはできません。

私が考えることができる唯一の潜在的な解決策は、TabItem ControlTemplateで単一のContentPresenterを定義することです - ContentPresenter(画像とラベル付き)は、ObservableCollectionからデータを受け取るDataTemplateによって定義されます。

私の理解の指針、提案、および/または訂正があれば幸いです。

答えて

0

より具体的に、達成したい行動はありますか? 一般に、タブヘッダーとタブコンテンツは個別に、また両方ともバインドされたデータ項目に基づいてスタイルを設定できます。簡単に推測できるように、itemtemplateはヘッダーを記述しますが、contenttemplateは内容を定義します。以下 サンプルは、方法を示しています。 (周囲のページ/ウィンドウ内の

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:sys="clr-namespace:System;assembly=mscorlib" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 

を含める)

<Grid> 
    <Grid.Resources> 
    <x:Array x:Key="data" Type="{x:Type sys:Type}"> 
     <x:Type TypeName="Visual"/> 
     <x:Type TypeName="UIElement"/> 
     <x:Type TypeName="FrameworkElement"/> 
    </x:Array> 
    </Grid.Resources> 
    <TabControl ItemsSource="{StaticResource data}"> 
    <TabControl.ItemTemplate> 
     <DataTemplate> 
      <TextBlock Text="{Binding Name}"> 
       <TextBlock.Style> 
       <Style TargetType="{x:Type TextBlock}"> 
        <Setter Property="Background" Value="DimGray"/> 
        <Setter Property="Foreground" Value="White"/> 
       </Style> 
       </TextBlock.Style> 
      </TextBlock> 
     </DataTemplate> 
    </TabControl.ItemTemplate> 
    <TabControl.ContentTemplate> 
     <DataTemplate> 
      <TextBlock Text="{Binding FullName}"> 
      <TextBlock.Style> 
       <Style TargetType="{x:Type TextBlock}"> 
       <Setter Property="Background" Value="LightCoral"/> 
       <Setter Property="Foreground" Value="Navy"/> 
       </Style> 
       </TextBlock.Style> 
      </TextBlock> 
     </DataTemplate> 
    </TabControl.ContentTemplate> 
    </TabControl> 
</Grid> 
0

これを実行するには、2つのステップがあります。

タブコントロールでは、リストボックス内でも使用されるアイテムコンテナスタイル<を使用することができます。また、「ContentPresenter」の周囲に「周囲」のUIを指定することができます。

また、DataTemplateも引き続き使用できます。データテンプレートはアイテムコンテナのスタイルの "ContentPresenter"内にレンダリングされます。

関連する問題