Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf TabControl.ItemTemplate:将TabItem.Header.Text设置为StringFormat的多重绑定_Wpf_Binding_Header_Tabcontrol_Tabitem - Fatal编程技术网

Wpf TabControl.ItemTemplate:将TabItem.Header.Text设置为StringFormat的多重绑定

Wpf TabControl.ItemTemplate:将TabItem.Header.Text设置为StringFormat的多重绑定,wpf,binding,header,tabcontrol,tabitem,Wpf,Binding,Header,Tabcontrol,Tabitem,如何将TabItem.Header设置为从几个字段获取的绑定,每个绑定以不同的大小显示,所有绑定都位于原始标题文本的位置;不覆盖标题的默认样式和行为-我只需要文本 我试图设置它的模板,但是它创建了一个包含内部控件的矩形,这个矩形对用户的点击没有响应,并且有控件样式,我希望这个控件是不可见的,只有它的文本应该是可见的 我尝试了以下方法: <TabControl ItemsSource="{Binding}"> <TabControl.ItemTemplate>

如何将TabItem.Header设置为从几个字段获取的绑定,每个绑定以不同的大小显示,所有绑定都位于原始标题文本的位置;不覆盖标题的默认样式和行为-我只需要文本

我试图设置它的模板,但是它创建了一个包含内部控件的矩形,这个矩形对用户的点击没有响应,并且有控件样式,我希望这个控件是不可见的,只有它的文本应该是可见的

我尝试了以下方法:

<TabControl ItemsSource="{Binding}">
    <TabControl.ItemTemplate>
         <DataTemplate>
             <TabItem>
                 <TabItem.Header>
                     <MultiBinding StringFormat="{}{0}-{1}">
                         <Binding Path="Title"/>
                         <Binding Path="Category.Title"/>
                     </MultiBinding>
                 </TabItem.Header>
                 <TabItem.Content>
                     <TextBlock>
                         Here is what is gonna be in the TabItem - not header
                     </TextBlock>
                 </TabItem.Content>
             </TabItem>
         </DataTemplate>
    </TabControl.ItemTemplate>
</TabControl>

以下是选项卡项中的内容-而不是标题
但它没有显示任何东西

我还尝试将HeaderTemplate设置为DataTemplate,但实际情况是,DataTemplate会覆盖TabItem样式,当我单击文本时,它不会转到单击的选项卡,此外,未选择的选项卡看起来非常有趣,我看到文本的矩形浮动,而我希望它是透明的


因此,为了总结我的问题,我想将TabItem.Header.Text设置为StringFormat的多重绑定。

TabControl包含ContentTemplate属性以及从ItemsControl继承的ItemTemplate。它使用ContentTemplate区分内容区域中显示的内容,而使用ItemTemplate定义标题的模板。此外,ItemSource中的每个项目将自动包装在一个TabItem中;它不需要在ItemTemplate中重新创建,因为这样会在您注意到的标题中放置一个TabItem

使用ItemTemplate定义标题内容,使用ContentTemplate定义内容,而不是在ItemTemplate中重新创建TabItem

<TabControl ItemsSource="{Binding}">
    <TabControl.ItemTemplate>
        <DataTemplate>
            <TextBlock>
                <TextBlock.Text>
                    <MultiBinding StringFormat="{}{0}--{1}">
                        <Binding Path="Title" />
                        <Binding Path="Category.Title" />
                    </MultiBinding>
                </TextBlock.Text>
            </TextBlock>
        </DataTemplate>
    </TabControl.ItemTemplate>
    <TabControl.ContentTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding MyContent}" />
        </DataTemplate>
    </TabControl.ContentTemplate>
</TabControl>

在第一段中,您提到希望在标题的绑定部分设置不同的大小。如果您确实想这样做,您将无法像上面那样使用单个绑定或多个绑定来设置文本。相反,您可以嵌套文本块来实现这一点,并为每个文本块设置不同的格式

<TabControl.ItemTemplate>
    <DataTemplate>
        <TextBlock>
            <TextBlock Text="{Binding Title}"
                       FontSize="12" />
            <Run Text="--" />
            <TextBlock Text="{Binding Category.Title}"
                       FontSize="10" />
        </TextBlock>
    </DataTemplate>
</TabControl.ItemTemplate>


几个小时前,我对这个问题给出了几乎相同的答案。但是这个问题似乎被删除并重新发布了?你为什么要删除这个问题的前一个版本?为什么不改变你所问的内容,并留下评论,然后让答案知道他们没有抓住重点,这是一个很好的答案?这些问题的风格目标类型是什么?我知道TabItem是用于按钮的,但是页面呢?~11年后,但是感谢@rmoore提供了简洁的答案和解释。