2011-03-10 129 views
0

我有一个TabControl与自定义ItemTemplate(TabItem)。访问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 
}