WPF选项卡控件仅对第一个选项卡使用不同的ItemTemplate

问题描述 投票:0回答:1

我正在使用带有TabControl的WPF。我定义了一个ItemTemplate,它为标题设置一个TextBlock,并为关闭选项卡设置一个按钮。我希望第一个标签不显示关闭按钮。我试图在ViewModel中使用“绑定到公共布尔”来设置按钮的可见性,并使用BooleanToVisibilityConverter进行转换,但是看起来好像在创建TabControl而不是在添加每个Tab时正在渲染ItemTemplate。

这是我的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);
        }
    }

我已经测试过通过将文本块绑定到IsTabClos​​eButtonVisible来设置属性,并且它从false更改为true。

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

wpf tabcontrol itemtemplate
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.