3

タブを動的に作成するWPFアプリがありますが、すべてのタブ項目にエキスパンダーとユーザーコントロールを含める必要があり、実行時にエキスパンダーとユーザーコントロールのデータコンテキストを正しく設定しないようにしたいので、スタイルでタブアイテムのテンプレートを定義すると、それを感じますexpnder と usercontrol の datacontext を設定するのは難しいでしょう。HeaderTemplate の順序

XAML コード

<TabControl Name="tabDynamic" ItemsSource="{Binding}" SelectionChanged="tabDynamic_SelectionChanged" FontSize="15" FontFamily="Verdana"  FontWeight="Normal"    FontStretch="Expanded" >
            <TabControl.Resources>
                <DataTemplate x:Key="TabHeader" DataType="TabItem">
                    <DockPanel>
                        <Button Name="btnDelete" DockPanel.Dock="Right" Margin="150,0,0,0" Content="X" Foreground="WhiteSmoke"  FontSize="10" 
                               FontWeight="Bold"   Padding="0" Click="btnDelete_Click" Height="15"
                               CommandParameter="{Binding RelativeSource={RelativeSource AncestorType={x:Type TabItem}}, Path=Name}"   >
                            <Button.Background>
                                <LinearGradientBrush EndPoint="1,0.5" StartPoint="0,0.5">
                                    <GradientStop Color="#FF9D4040" Offset="0" />
                                    <GradientStop Color="#FFB11212" Offset="1" />
                                </LinearGradientBrush>
                            </Button.Background>
                            <!--<Image Source="/delete.gif" Height="11" Width="11"></Image>-->
                        </Button>
                        <TextBlock Text="{Binding RelativeSource={RelativeSource AncestorType=TabItem }, Path=Header}"  />
                    </DockPanel>
                </DataTemplate>
            </TabControl.Resources>
        </TabControl>

codebehind ill にコンテンツを追加し、

     Private Function AddTabItem() As TabItem
        Dim count As Integer = _tabItems.Count

        Dim tab As New TabItem()

        tab.Header = String.Format("tab{0}", count)
        tab.Name = String.Format("tab{0}", count)
        tab.HeaderTemplate = TryCast(tabDynamic.FindResource("TabHeader"), DataTemplate)

        _tabItems.Insert(count - 1, tab)

          obj = New ThumbnailImages

        ' add controls to tab item, 
        If ImageCollection.Count > 0 Then
            obj.SetDataContext(ImageCollection)
            tab.Content = obj
        End If
        Return tab
    End Function

今、コンテンツを expander と Usercontrol でテンプレート化する必要がありますが、どうすれば達成できますか?

4

1 に答える 1

1

(または必要に応じて) に aContentTemplateを追加するだけです。すべて XAML で行います。TabControlTabItem

<TabControl>
  <TabControl.ContentTemplate>
    <DataTemplate>
      <Expander>
        <my:UserControl />
      </Expander>
    </DataTemplate>
  </TabControl.ContentTemplate>
</TabControl>

これはテンプレートであるため、がコンテンツとして に設定DataContextするThumbnailImagesオブジェクトになりますTabControl

私が言及するもう 1 つのことは、のHeaderTemplateプロパティを設定できるTabControlため、コードでアクセスする必要がないことです。また、ヘッダーやコンテンツの複数のテンプレートを扱っている場合は、DataTemplateSelectorを調べてください。

于 2013-06-26T14:02:03.040 に答える