You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

UWP中RichEditBox控件的文本垂直对齐实现方法咨询

在UWP的RichEditBox中实现文本垂直对齐的方案

RichEditBox本身没有直接提供垂直对齐的原生API,以下是两种可行的实现方式:

方法一:通过容器控件实现整体垂直对齐

将RichEditBox放入Grid容器中,利用Grid的布局特性让内容区域在指定尺寸内垂直居中,同时保留RichEditBox的编辑功能:

public sealed partial class MainPage : Page
{
    public MainPage()
    {
        this.InitializeComponent();
        
        // 创建固定尺寸的Grid容器
        var containerGrid = new Grid()
        {
            Width = 500,
            Height = 500,
            BorderBrush = new SolidColorBrush(Colors.Blue),
            BorderThickness = new Thickness(1)
        };

        var box1 = new RichEditBox()
        {
            HorizontalAlignment = HorizontalAlignment.Stretch,
            VerticalAlignment = VerticalAlignment.Center,
            // 取消固定高度,让控件自适应内容高度
            Height = double.NaN,
            TextAlignment = TextAlignment.Center
        };

        box1.Document.SetText(0, "asdfghjklkjhgfdsgffffffffffff\nzAsdfghjk\nlkjhgfdsasdfgh\nkjhgfdfghjkl\nlkjhgfdghjk");

        containerGrid.Children.Add(box1);
        Content = containerGrid;
    }
}

这种方式适合内容高度小于容器高度的场景,当内容过多时,RichEditBox会自动显示滚动条,滚动区域内的内容依然保持水平居中。

方法二:通过修改段落格式模拟垂直分布(适合固定内容场景)

如果需要让文本在RichEditBox可视区域内均匀垂直分布,可以通过设置段落的行距和间距来模拟效果:

public sealed partial class MainPage : Page
{
    public MainPage()
    {
        this.InitializeComponent();
        
        var box1 = new RichEditBox()
        {
            Width = 500,
            Height = 500,
            BorderBrush = new SolidColorBrush(Colors.Blue),
            BorderThickness = new Thickness(1),
            TextAlignment = TextAlignment.Center
        };

        var text = "asdfghjklkjhgfdsgffffffffffff\nzAsdfghjk\nlkjhgfdsasdfgh\nkjhgfdfghjkl\nlkjhgfdghjk";
        box1.Document.SetText(0, text);

        // 获取文档段落格式对象
        var paraFormat = box1.Document.Selection.ParagraphFormat;
        paraFormat.Alignment = Windows.UI.Text.ParagraphAlignment.Center;
        // 设置最小行距规则,根据容器高度和内容行数计算行距
        paraFormat.LineSpacingRule = Windows.UI.Text.LineSpacingRule.AtLeast;
        // 40为控件上下内边距估算值,5为内容行数,可根据实际情况调整
        paraFormat.LineSpacing = (box1.ActualHeight - 40) / 5;

        Content = box1;
    }
}

这种方式需要预估内容行数,适合内容固定的场景,动态内容需额外编写逻辑计算行数和对应行距。

注意:RichEditBox的核心设计是流式文本编辑,类似Excel单元格的垂直对齐并非其原生特性,上述方案是基于UWP布局系统和文本格式的折中实现。

内容的提问来源于stack exchange,提问作者pavan kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 23:22:37