使用 Inline 元素配合换行符(手动竖排)果你需要每个字符独立垂直排列(类似传统中文碑文),且不使用旋转,可以通过在每个字符后添加换行符 Markdig.Syntax.Inlines.CodeInline 来实现
csharp
<TextBlock FontFamily="楷体_GB2312" FontSize="22">
<Run Text="竖"/>
<LineBreak/>
<Run Text="向"/>
<LineBreak/>
<Run Text="排"/>
<LineBreak/>
<Run Text="列"/>
</TextBlock>
代码后台动态生成(结合你当前的 YangshangrenText_Change 逻辑): 你当前的代码已经使用了 Split('\n') 并动态创建 TextBlock,这其实是一种"手动竖排"的变体。如果你想在一个 TextBlock 内实现,可以这样修改:
csharp
private void UpdateVerticalText(TextBlock targetBlock, string inputText)
{
targetBlock.Inlines.Clear();
if (string.IsNullOrEmpty(inputText)) return;
// 方法 A: 如果输入本身包含换行符,直接保留
// 方法 B: 如果希望每个字符都换行(传统竖排)
char[] chars = inputText.ToCharArray();
for (int i = 0; i < chars.Length; i++)
{
targetBlock.Inlines.Add(new Run(chars[i].ToString()));
if (i < chars.Length - 1)
{
targetBlock.Inlines.Add(new LineBreak());
}
}
}
系统内数据写在TextChange方法
csharp
/// <summary>
/// 超荐信息输入框回车事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void ChaojianXinxiText_Change(object sender, TextChangedEventArgs e)
{
string StrText = this.CaojianXinxi.Text;
string[] strArr = StrText.Split(new char[] { '\n' });
if (strArr != null)
{
PanelCaojianxinxi.Children.Clear();
PanelCaojianxinxi.Orientation = Orientation.Vertical;
for (int i = 0; i < strArr.Length; i++)
{
TextBlock ThisText = new TextBlock();
ThisText.Height =600;
ThisText.Width =20;
ThisText.TextWrapping = TextWrapping.Wrap;
ThisText.FontSize = 15;
ThisText.FontFamily = new FontFamily("楷体_GB2312");
ThisText.Margin = new Thickness(10);
UpdateVerticalText(ThisText, strArr[i]);
PanelCaojianxinxi.Children.Add(ThisText);
}
}
}
实现效果如此:
