WPF RichTextBox如何实现底部对齐文本

3

我正在尝试制作一个聊天窗口,类似于IRC,其中内容从底部向上显示,就像任何已创建的聊天窗口一样。

这是我的XAML,没有什么花哨的东西

<Window
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:ee="http://schemas.microsoft.com/expression/2010/effects" xmlns:ed="http://schemas.microsoft.com/expression/2010/drawing" x:Class="TestChat.Chat"
    Title="Chat" Height="700" Width="400" WindowStyle="ThreeDBorderWindow" ResizeMode="CanMinimize">

    <Grid>
        <RichTextBox x:Name="txtChat" HorizontalAlignment="Left" Height="644" Margin="0,10,0,0" VerticalAlignment="Top" Width="388" VerticalScrollBarVisibility="Auto">
            <FlowDocument />
        </RichTextBox>
    </Grid>
</Window>

我有一个背景工作者正在将文本添加到它上面。

private void SendWorkerComplete(object s, ProgressChangedEventArgs args)
{
    txtChat.AppendText(args.UserState.ToString());
    txtChat.ScrollToEnd();
}

private void SendWorker_DoWork(object sender, DoWorkEventArgs e)
{
    SendWorker.ReportProgress(0, (string)e.Argument);
}

将 VerticalContentAlignment 属性设置为 bottom 并不会以此方式呈现内容,应该如何处理?有属性可以实现吗,还是必须在程序中完成?


这里有一个类似的需求。虽然不完全符合您的要求,但可能适用于您:https://dev59.com/s2kv5IYBdhLWcg3w1kWr - JamieMeyer
如果RichTextBox为空,则只会滚动到底部,这种行为没有用处。我猜我可以添加一堆空行并在将输出附加到其中之前滚动到末尾来重现此行为,但我正在寻找更优雅的方法来做到这一点,无论如何感谢您。 - FuuRe
你能展示一下你正在使用的XAML吗? - StillLearnin
当然,这没什么值得一提的。 - FuuRe
@StillLearnin会在几个小时内完成,但是你对解决方案的评论让我更加明白了,虽然它没有直接回答问题,但我认为这是我应该采取的方法,非常感谢。至于回答你之前的评论,好老的mIRC从底部开始显示文本。 - FuuRe
显示剩余5条评论
2个回答

0
为什么要使用RichTextBox?直接使用普通的TextBox不就好了吗?
<Grid>
    <TextBox x:Name="txtChat" VerticalScrollBarVisibility="Auto" Margin="10" Text="Hello" VerticalContentAlignment="Bottom" />
</Grid>

这是一个聊天程序,所以它需要具有表情符号、不同的字体大小、样式、颜色等功能......你懂的。 - FuuRe
1
@FuuRe 啊!我明白了。我以为你只是使用纯文本界面,因为如果是我,想要处理表情符号、花式样式等等,我肯定不会使用richtextbox。首先,我会建立一个消息类及其相关属性(发送者、消息等),然后构建一个自定义的xaml控件来表示消息对象。每次收到一条消息,就创建一个新的消息对象并将其添加到集合中。将listview绑定到该集合,列表项模板为您的自定义xaml控件。 - StillLearnin

-1

你已将 margin-left 设置为 545,这使得富文本框超出了窗口。将代码更改为以下内容可以将控件显示在窗口底部:

<RichTextBox x:Name="txtChat" HorizontalAlignment="Stretch" Height="42" VerticalAlignment="Bottom" Width="auto" VerticalScrollBarVisibility="Auto" Background="Yellow">
        <FlowDocument />
</RichTextBox>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接