2013-06-26 6 views
3

У меня есть приложение WPF, который создает вкладку динамически, теперь я хочу каждая вкладка элемент должен содержать расширитель и UserControl, а также жестокий установить DataContext для расширителя и UserControl во время выполнения, так что если Я определяю шаблон для tabitem в стиле, я чувствую, что трудно установить datacontext для expnder и usercontrol. Для того, чтобы HeaderTemplateDynamic TabItem с Предопределенным Шаблоном

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> 

В коде плохо добавить содержимое,

 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 

Теперь мне нужно содержимое для шаблонных с расширителем и UserControl, как может я достигаю?

ответ

1

Вам просто нужно добавить ContentTemplate в TabControl (или TabItem, если хотите). Я хотел бы сделать все это в XAML:

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

Поскольку это шаблон, то DataContext будет вы настраиваете как содержание в TabControlThumbnailImages объект.

Еще одна вещь, которую я хотел бы упомянуть, заключается в том, что вы можете установить свойство HeaderTemplate для TabControl, поэтому вам не нужно обращаться к нему в коде. И если вы имеете дело с несколькими шаблонами для заголовка и/или контента, загляните в DataTemplateSelector.

+0

Thanx для ответа ур, это не понравилось мне. Я нашел решение, я добавил, что расширитель в моем usercontrol, bcz расширитель имеет сложную логику, а затем добавил элемент usercontrol в элемент табуляции. – Selva