0

我有一个带有自定义 ItemTemplate 的 TabControl(用于 TabItem)。

我想隐藏最后一个选项卡项,如果我可以绑定到 TabItem 的 Visibility 属性,这将是可能的。

有什么建议么?

4

1 回答 1

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
}
于 2011-03-12T22:38:49.007 回答