WPF实现文字纵向排布的TabItem

文章目录

WPF布局

基本用法

WPF中的TabControl是一个容器控件,用于在单个窗体或页面中承载多个选项卡。每个选项卡可以包含不同的控件,用于显示不同的内容,其最简单的调用方法如下,只需在TabControl中无脑添加TabItem,就可以得到一个个用之不竭的控件抽屉了

xml 复制代码
<TabControl>
  <TabItem Header="TAB1">
  </TabItem>
  <TabItem Header="TAB2">
  </TabItem>
</TabControl>

通过调整TabStripPlacement属性,可以更改抽屉标题的位置,例如

xml 复制代码
<TabControl TabStripPlacement="Left">
    <!--内容不变-->
</TabControl>

效果如下

文字竖排显示

通过设置TabStripPlacement得到的纵向TabItem并不美观,尤其是抽屉较少的情况下,左下角有大量的空白,如果能够想办法让文字纵向显示,就十分完美。直接在文字中加入\n并不能实现这一功能,为此,需要修改TabItem的HeaderTemplate,具体方法是,添加一个Resources,并在其中以TabItem为目标新建一个Style。

通过为TabItem中的文本区域添加一个Convert,从而实现标题文字的竖排显示

xml 复制代码
<TabControl.Resources>
   <local:TabItemConverter x:Key="TabItemConverter"/>
   <Style x:Key="TabItemVerticalStyle" TargetType="TabItem">
       <Setter Property="HeaderTemplate">
           <Setter.Value>
               <DataTemplate>
                   <TextBlock Text="{Binding Path=Header,
                       RelativeSource={RelativeSource AncestorType=TabItem},
                       Converter={StaticResource TabItemConverter}}">
                   </TextBlock>
               </DataTemplate>
           </Setter.Value>
       </Setter>
   </Style>
</TabControl.Resources>

其中,local是本地命名空间,在本例中,是tabTest

xml 复制代码
<Window x:Class="tabTest.MainWindow"
     xmlns:local="clr-namespace:tabTest"
     Title="MainWindow" Height="200" Width="360">

而TabItemConverter,则是手动实现的文字转换类,这个类通过继承IValueConverter接口来实现,后者内部封装了两个方法,分别是Convert和ConvertBack,只需实现前一个方法即可,修改结果如下

cs 复制代码
public class TabItemConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture){
        string str = value.ToString();
        return string.Join("\n", str.Select(s => s));
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture){
        throw new NotImplementedException();
    }
}

效果如下

相关推荐
Chris _data3 小时前
c#学习WPF笔记(一)
学习·c#·wpf
FuckPatience19 小时前
WPF 自定义容器控件的布局
wpf
逆境不可逃20 小时前
深入理解 SingleFlight:从单机到分布式的请求合并方案全解析
分布式·wpf
TDengine (老段)21 小时前
TDengine 逻辑计划生成 — 从 AST 到关系代数算子树
大数据·数据库·物联网·wpf·时序数据库·tdengine·涛思数据
小二·2 天前
微服务架构设计与实践
微服务·架构·wpf
暖馒2 天前
WPF-Prism学习入门步骤记录
学习·wpf
baivfhpwxf20232 天前
雷赛(Leadshine)EtherCAT 数字 I/O 模块(如 EMC-E5064-8)的状态指示灯(I/O 状态)说明
c#·wpf
故渊at3 天前
第二板块:Android 四大组件标准化学理 | 第十二篇:四大组件全景总结与系统服务(System Server)架构
android·架构·wpf·四大组件·system service
伶俜663 天前
# [特殊字符] 零基础学 ArkUI 数据持久化(专题三):5 种存储方案深度对比
学习·华为·wpf·harmonyos
IT策士3 天前
Redis 从入门到精通:数据结构String 与键管理
数据结构·redis·wpf