访问DataTemplate属性

时间:2011-03-10 04:29:04

标签: silverlight binding telerik datatemplate ancestor

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

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

                           

有什么建议吗?

1 个答案:

答案 0 :(得分: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
}