2011-03-10 1 views
0

J'ai un TabControl avec un ItemTemplate personnalisé (pour le TabItem).Access DataTemplate, propriété

Je voudrais cacher le dernier élément de l'onglet et si je pouvais me lier à la propriété Visibilité de TabItem, cela serait possible.

Toutes les suggestions?

Répondre

0

J'ai trouvé un moyen de le faire avec un comportement. J'aurais préféré une solution plus propre comme une reliure, mais ça marche.

 <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 
} 
Questions connexes