DataTemplate中的RelativeSource与TabControl一起使用,但不与TabItem一起使用

时间:2012-02-22 11:57:34

标签: wpf data-binding datatemplate tabcontrol tabitem

我有一个TabControl,其中有一个带有ContentControl的TabItem。此ContentControl应用于datatemplate。代码在这里:

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

请注意,datatemplate中的Image Source是TabItem的Tag。这不起作用。但是如果我改变Source来获取TabControl的标签就行了。

使用TabItem标签的任何原因都不起作用?

1 个答案:

答案 0 :(得分:4)

如果您使用类似Snoop的内容来查看实际的Visual Tree,我们会看到TabControl的Header和Content位于不同的区域,而TabItem只存在于Header区域,而不是Content区域。 “内容”区域仅保留当前的SelectedItem。

enter image description here