TabGroup标题纵向排列

TabGroup标题纵向排列

近期遇到一个需求,是希望系统底部的命令窗口标题能够改为纵向,如下图所示:

理论上可以通过将标题设为textblock,通过旋转textblock中的文字来达到目的,但是由于该窗口是调用的一个系统自定义组件,传入的标题是一个string,所以无法直接更改,尽管尝试将自定义组件中的string改为textblock,并在自定义组件中直接旋转,然而并没有生效,最终尝试用遍历可视化树子控件的方法进行解决,如下所示:
var bottomArea = new TabbedGroup();
bottomArea.Name = "bottomarea";
bottomArea.ItemHeight = new GridLength(160);
bottomArea.AllowRestore = true;
bottomArea.AllowActivate = false;
bottomArea.DestroyOnClosingChildren = false;
bottomArea.Items.CollectionChanged += (s, e) =>
{
    bottomArea.Items.Cast<LayoutPanel>().ToList().ForEach(item =>
    {
        item.GotFocus += (ss, ee) =>
        {
            haveFind = false;
            FindChildControl(item);
        };
    });
};
private bool haveFind = false;
/// <summary>
/// 查找标题控件
/// </summary>
/// <param name="item"></param>
private void FindChildControl(DependencyObject item)
{
	//避免将标题以外的内容也进行旋转
	if (haveFind) return;
    var count = VisualTreeHelper.GetChildrenCount(item);
    for (int i = 0; i < count; i++)
    {
        var child = VisualTreeHelper.GetChild(item, i);
        if (child is TextBlock text)
        {
            if (text is null) return;
            if (text.DataContext is null) return;
            var temp = text.DataContext.ToString();
            if (!temp.Contains("\n"))
            {
                var result = "";
                for (int j = 0; j < temp.Length; j++)
                {
                    result += temp.Substring(j, 1) + "\n";
                }
                text.DataContext = result.Substring(0, result.Length - 1);
            }
            text.LayoutTransform = new RotateTransform { Angle = 90 };
            text.RenderTransformOrigin = new Point(0.5, 0.5);
            return;
        }
        else
            FindChildControl(child);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ShirmyMao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值