如何在DataTemplate中访问动态控件WPF

本文关键字:访问 动态控件 WPF DataTemplate | 更新日期: 2023-09-27 18:11:12

我创建了一个TabItem动态的tabcontrol,每个TabItem都有一个按钮来关闭它,但是只希望当TabItem被选中时按钮可见。但是我不能访问DataTemplate

中的控件
<TabControl Name="dynamicTab" ItemsSource="{Binding}" Margin="0,85,0,0">
    <TabControl.Resources>
        <DataTemplate x:Key="TabHeader" DataType="TabItem">
                    <DockPanel>
                        <Button 
                            Focusable="False"
                            BorderThickness="0" 
                            Background="Transparent"
                            BorderBrush="Transparent"
                            Padding="-4"
                            Height="10"
                            Width="10"
                            Name="btnDelete" Visibility="Hidden" DockPanel.Dock="Right" Margin="5,0,0,0" Click="btnDelete_Click" 
                            CommandParameter="{Binding RelativeSource={RelativeSource AncestorType={x:Type TabItem}}, Path=Name}">
                            <Image Name="imgButtonClose" Source="/Recursos;component/Imagens/close16x16.png" Height="10" Width="10"/>
                        </Button>
                        <TextBlock Text="{Binding RelativeSource={RelativeSource AncestorType={x:Type TabItem}}, Path=Header}" />
                    </DockPanel>
        </DataTemplate>
    </TabControl.Resources>
</TabControl>

如何在DataTemplate中访问动态控件WPF

只使用祖先TabItem的IsSelected属性的绑定:

<BooleanToVisibilityConverter x:Key="boolToVisibilityConverter"/>
...
<Button ...
        Name="btnDelete" 
        Visibility="{Binding RelativeSource={RelativeSource AncestorType={x:Type TabItem}}, Path=IsSelected, Converter={StaticResource boolToVisibilityConverter}"> 
        ...
</Button>

如果你对这个绑定没有问题:

CommandParameter="{Binding RelativeSource={RelativeSource AncestorType={x:Type TabItem}}, Path=Name}"