WPF选项卡控件覆盖单个选项卡内容的模板

时间:2016-11-17 07:29:09

标签: wpf tabcontrol itemtemplate

我有一个带有一些静态标签的标签控件。但是,我还想动态添加一些额外的选项卡。因此,我定义了一个标头模板(使用TabControl.ItemTemplate)和一个内容模板(使用TabControl.ContentTemplate)。但是,静态选项卡将显示不同的内容,因此我设置了单独的Tab项目的内容模板。但是出于某种原因,我为设置标签内容而创建的项目内容模板也适用于标题。

您可以从附带的屏幕截图和代码中看到,当标签标题设置为“电子邮件”时,标题内容会显示在标题和内容部分中。

如果您需要进一步澄清,请与我们联系。

public function injectConfigurationManager(
    \TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface $configurationManager
) {
    $this->configurationManager = $configurationManager;
        $typoScriptService = GeneralUtility::makeInstance(\TYPO3\CMS\Extbase\Service\TypoScriptService::class);
        $typoScriptArray = $typoScriptService->convertPlainArrayToTypoScriptArray($originalSettings);
        $stdWrapProperties = GeneralUtility::trimExplode(',', $originalSettings['useStdWrap'], true);
        foreach ($stdWrapProperties as $key) {
            if (is_array($typoScriptArray[$key . '.'])) {
                $originalSettings[$key] = $this->configurationManager->getContentObject()->stdWrap(
                    $originalSettings[$key],
                    $typoScriptArray[$key . '.']
                );
            }
        }
    }
    $this->settings = $originalSettings;
}

<TabControl Name="ResultsTabControl" SelectionChanged="Selector_OnSelectionChanged" Margin="-2,2" SelectedIndex="{Binding SelectedResultsTab, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">

<TabControl.Resources>
    <Style TargetType="TabItem" BasedOn="{StaticResource AccentedMetroTabItemStyle}"></Style>
</TabControl.Resources>

<TabControl.ItemTemplate>
    <DataTemplate>
        <TextBlock Text="{Binding RelativeSource={RelativeSource AncestorType={x:Type TabItem}}, Path=Header}" />
    </DataTemplate>
</TabControl.ItemTemplate>

<TabControl.ContentTemplate>
    <DataTemplate>
        <TextBlock Text="Testing"/>
    </DataTemplate>
</TabControl.ContentTemplate>

<TabItem Name="EmailListTab" Header="Emails" Style="{StaticResource AccentedMetroTabItemStyle}">
    <TabItem.ContentTemplate>
        <DataTemplate>
                <TextBlock Text="My Emails Tab"/>
        </DataTemplate>
    </TabItem.ContentTemplate>
</TabItem>

TabControl

1 个答案:

答案 0 :(得分:1)

问题是我们不知道controls1:ContentControlEx中发生了什么。

基本上你错过了你风格标题的ContentPresenter

<ContentPresenter x:Name="contentPresenter" ContentSource="Header" Focusable="False" HorizontalAlignment="{Binding HorizontalContentAlignment, RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}" Margin="{TemplateBinding Padding}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{Binding VerticalContentAlignment, RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}"/>

它可能是controls1:ContentControlEx的一部分,但你必须也要显示它。