访问数据模板属性

发布于 2024-10-21 01:39:28 字数 170 浏览 9 评论 0原文

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

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

有什么建议吗?

I have a TabControl with a custom ItemTemplate (for the TabItem).

I would like to hide the last tab item and if I could bind to the TabItem's Visibility property this would be possible.

Any suggestions?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

微暖i 2024-10-28 01:39:28

我找到了一种通过行为来做到这一点的方法。我更喜欢更清洁的解决方案,例如绑定,但它确实有效。

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

I figured out a way to do this with a behavior. I would have preferred a cleaner solution such as a binding, but it works.

     <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
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文