首页 > 解决方案 > WPF 选项卡控件仅对第一个选项卡使用不同的 ItemTemplate

问题描述

我正在使用带有 TabControl 的 WPF。我已经定义了一个 ItemTemplate,它为标题设置一个 TextBlock 和一个用于关闭选项卡的按钮。我希望第一个选项卡不显示关闭按钮。我尝试使用 Binding to a Public bool 在我的 ViewModel 中设置按钮的 Visiblity 并使用 BooleanToVisibilityConverter 进行转换,但看起来 ItemTemplate 是在创建 TabControl 时呈现的,而不是在添加每个 Tab 时呈现。

这是我的 TabControl xaml(我尝试过使用和不使用 FallbackValue)

<TabControl x:Name="Items" Grid.Row="1" Grid.Column="0">
        <TabControl.ItemTemplate>
            <DataTemplate>
                <StackPanel Orientation="Horizontal">
                    <TextBlock Text="{Binding DisplayName}" />
                    <Button x:Name="CloseTab" Content="X" Visibility="{Binding IsTabCloseButtonVisible, Converter={StaticResource BooleanToVisibilityConverter}, FallbackValue=Hidden}"
                            cal:Message.Attach="DeactivateItem($dataContext, 'true')" />
                </StackPanel>
            </DataTemplate>
        </TabControl.ItemTemplate>
    </TabControl>

在 App.xaml 我有转换器

    <Application.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary>
                <local:Bootstrapper x:Key="Bootstrapper"/>
            </ResourceDictionary>
         </ResourceDictionary.MergedDictionaries>
        <BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter" />
    </ResourceDictionary>
</Application.Resources>

在 ViewModel 我有一个公共财产

private bool _isTabCloseButtonVisible;

    public bool IsTabCloseButtonVisible
    {
        get { return _isTabCloseButtonVisible; }
        set 
        {
            _isTabCloseButtonVisible = value;
            NotifyOfPropertyChange(() => IsTabCloseButtonVisible);
        }
    }

我已经测试了通过将 Textblock 绑定到 IsTabClos​​eButtonVisible 来设置属性,并且它从 false 变为 true。

是否有可能实现我想要做的事情?

标签: wpftabcontrolitemtemplate

解决方案


我已经设法解决了这个问题。我在错误的 ViewModel 中有该属性,因此它没有被绑定。


推荐阅读