TabGroup标题纵向排列
近期遇到一个需求,是希望系统底部的命令窗口标题能够改为纵向,如下图所示:
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);
}
}