2011-03-10 1 views
0

(TabItem에 대해) 사용자 지정 ItemTemplate이있는 TabControl이 있습니다.DataTemplate 속성에 액세스

마지막 탭 항목을 숨기고 싶습니다. TabItem의 가시성 속성에 바인딩 할 수 있다면 가능합니다.

어떤 제안?

답변

0

나는 행동으로 이것을하는 방법을 알아 냈다. 바인딩과 같은 더 깨끗한 솔루션을 선호했지만 작동합니다.

 <telerik:RadTabControl x:Name="myRadTabControl"> 
     <telerik:RadTabControl.ItemTemplate> 
      <!-- Tab Item Header --> 
      <DataTemplate> 
       <TextBlock> 
        <i:Interaction.Behaviors> 
         <Behaviors:MakeLastTabItemInvisible ParentRadTabControl="{Binding ElementName=myRadTabControl}" /> 
        </i:Interaction.Behaviors> 
       </TextBlock> 
      </DataTemplate> 
     </telerik:RadTabControl> 
     </telerik:RadTabControl x:Name="myRadTabControl"> 

public class MakeLastTabItemInvisible : Behavior<FrameworkElement> 
{ 
    #region ParentRadTabControl Dependency Property 

    /// <summary> 
    /// ParentRadTabControl 
    /// </summary> 
    public RadTabControl ParentRadTabControl 
    { 
     get { return (RadTabControl)GetValue(ParentRadTabControlProperty); } 
     set { SetValue(ParentRadTabControlProperty, value); } 
    } 

    /// <summary> 
    /// ParentRadTabControl Dependency Property. 
    /// </summary> 
    public static readonly DependencyProperty ParentRadTabControlProperty = 
     DependencyProperty.Register(
      "ParentRadTabControl", 
      typeof(RadTabControl), 
      typeof(MakeLastTabItemInvisible), 
      new PropertyMetadata(new PropertyChangedCallback(ParentRadTabControlChanged))); 

    private static void ParentRadTabControlChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) 
    { 
     MakeLastTabItemInvisible c = d as MakeLastTabItemInvisible; 
     if (c != null) 
     { 
      if (e.NewValue == null) return; 

      var parentTabControl = (RadTabControl)e.NewValue; 
      if (parentTabControl.Items.Count <= 0) return; 

      var lastTabItem = parentTabControl.ItemContainerGenerator.ContainerFromIndex(parentTabControl.Items.Count - 1) as RadTabItem; 

      if (lastTabItem != null) lastTabItem.Visibility = Visibility.Collapsed; 
     } 
    } 

    #endregion 
}