RelativeSource в DataTemplate работает с TabControl, но не с TabItem - PullRequest
3 голосов
/ 22 февраля 2012

У меня есть TabControl и внутри него TabItem, имеющий ContentControl. Этот ContentControl применяется табличка данных. Код здесь:

<TabControl x:Name="tabControl1" Tag="Giving URI here works">
                        <TabItem x:Name="tabItem1" Tag="Giving URI here doesnt work">
                            <ContentControl ContentTemplate="{StaticResource myOptionsDataTemplate}">
                                <StackPanel>
                                    <TextBlock Text="Some Text" />
                                </StackPanel>
                            </ContentControl>
                        </TabItem>
</TabControl>

И шаблон данных:

 <DataTemplate x:Key="myOptionsDataTemplate">
        <Border>
            <Grid>
                <Grid.RowDefinitions>
                    <RowDefinition Height="Auto" />
                    <RowDefinition Height="Auto" />
                </Grid.RowDefinitions>
                <DockPanel LastChildFill="True">
                    <Image Source="{Binding Path=Tag, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type TabItem}}}"
                            Width="32" Height="32"
                            HorizontalAlignment="Left"
                            VerticalAlignment="Top"
                            DockPanel.Dock="Left"
                            Margin="0,0,4,0"/>
                    <Label Content="Some Text"
                            />
                </DockPanel>
                <ContentControl Grid.Row="2" Content="{TemplateBinding ContentControl.Content}"/>
            </Grid>
        </Border>
    </DataTemplate>

Обратите внимание, что источником изображения в табличке данных является Tag of TabItem. Это не работает Но если я изменю источник на тег TabControl, он будет работать.

Любая причина, почему использование Tag of TabItem не работает ??

1 Ответ

4 голосов
/ 22 февраля 2012

Если вы используете что-то вроде Snoop , чтобы посмотреть на фактическое нарисованное дерево визуалов, вы увидите, что заголовок и содержимое TabControl находятся в отдельных областях, а элементы TabItems существуют только в области заголовка, а неКонтентная область.Область содержимого содержит только текущий выбранный элемент.

enter image description here

...