微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

wpf – TabControl.ItemTemplate:使用StringFormat将TabItem.Header.Text设置为MultiBinding

如何将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的MultiBinding。

解决方法

TabControl包含一个ContentTemplate属性以及它从ItemsControl继承的ItemTemplate。它使用ContentTemplate来区分Content区域中显示内容,而ItemTemplate则定义Header的模板。此外,ItemSource中的每个Item都将自动包装在TabItem中;它不需要在ItemTemplate中重新创建,因为它会尝试将TabItem放在Header中,如您所注意到的那样。

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

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

在您的第一段中,您提到要在标题的边界部分设置不同的大小。如果您确实想这样做,您将无法使用单个Binding或MultiBinding来设置文本,如上所述。相反,您可以嵌套TextBlocks来实现这一点,每种格式都有不同的格式。

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

原文地址:https://www.jb51.cc/html/232553.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐