Как получить доступ к динамическому управлению WPF в DataTemplate

Я создал tabcontrol с помощью TabItem dynamic и каждый 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>

person Felipe Saboya    schedule 02.07.2014    source источник


Ответы (1)


Просто используйте привязку к свойству IsSelected предка TabItem:

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

тогда предложенный код должен работать.

person Eugene Podskal    schedule 02.07.2014
comment
Спасибо, все заработало на 100% Только пришлось сменить BoolToVisibilityConverter на BooleanToVisibilityConverter THX - person Felipe Saboya; 02.07.2014