2013-06-26 3 views
3

나는 동적으로 탭을 생성하는 WPF 응용 프로그램은 지금은 원하는 한 모든 탭 항목, 그래서 만약 런타임 동안 확장기 및 UserControl에 대한 데이터 컨텍스트를 설정 또한 확장 및 UserControl을 및 병을 포함해야 Style의 tabitem에 대한 템플릿을 정의하면 expnder 및 usercontrol에 대해 datacontext를 설정하는 것이 어렵다고 느낍니다. 는 HeaderTemplate 위해서는동적 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

ContentTemplateTabControl (또는 원하는 경우 TabItem)에 추가하기 만하면됩니다. 내가 XAML에서 모든 것을 할 것입니다 :

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

을이 템플릿이기 때문에, DataContext 당신이 TabControl의 내용으로 설정하고있는 ThumbnailImages 대상이됩니다.

내가 언급 한 또 다른 사항은 TabControlHeaderTemplate 속성을 설정하여 코드에서 액세스 할 필요가 없다는 것입니다. 헤더 및/또는 콘텐츠에 대한 여러 템플릿을 다루는 경우 DataTemplateSelector을 살펴보십시오.

+0

고맙습니다 답장을 위해 고맙습니다, 이건 내가 필요로하지 않습니다 .. 솔루션을 발견, 나는 내 사용자 정의 컨트롤에 확장기를 추가, bcz 확장기는 몇 가지 복잡한 논리를 가지고 다음 탭 항목에 usercontrol을 추가했습니다. – Selva