.net 如何使带有滚动条的WPF文本框在添加行时自动滚动到底部?
例如,就像VisualStudio的“输出”窗口一样.net 如何使带有滚动条的WPF文本框在添加行时自动滚动到底部?,.net,wpf,scroll,.net,Wpf,Scroll,例如,就像VisualStudio的“输出”窗口一样 在XAML中有什么方法可以做到这一点吗?您可以编写一个或更好的a来侦听回调中的和。您可以在向该文本框添加内容时或在侦听事件TextChanged时使用此方法: .Visual Studio输出窗口的行为是特殊的,因为只有插入符号位于文本框的末尾时,它才会保持自动向下滚动,这样,如果在文本框中添加新行,您就可以在不受干扰的情况下检查输出 我在这个代码中有这样的行为 bool scrollToEnd = TbEvents.CaretIndex =
在XAML中有什么方法可以做到这一点吗?您可以编写一个或更好的a来侦听回调中的和。您可以在向该文本框添加内容时或在侦听事件TextChanged时使用此方法:
.Visual Studio输出窗口的行为是特殊的,因为只有插入符号位于文本框的末尾时,它才会保持自动向下滚动,这样,如果在文本框中添加新行,您就可以在不受干扰的情况下检查输出 我在这个代码中有这样的行为
bool scrollToEnd = TbEvents.CaretIndex == TbEvents.Text.Length;
TbEvents.AppendText(text + Environment.NewLine);
if (scrollToEnd)
{
TbEvents.CaretIndex = TbEvents.Text.Length;
TbEvents.ScrollToEnd();
}
在XAML中有一种方法可以做到这一点,您可以使用这种样式像控制台一样显示它(请注意其缺点,它看起来像控制台,但并不完全像控制台)
它是如何工作的
在文本框内,一个ScrollViewer垂直翻转(在底部添加“新”行)
在ScrollViewer中,还有另一个文本框,可以垂直翻转以正确显示文本(而不是倒置)
使用样式
将其包含在App.xaml或通过ResourceDictionary中,并将文本框的样式设置为ConsoleTextBox
<TextBox Style="{StaticResource ConsoleTextBox}"/>
缺点
- 从“控制台”复制文本时,不会出现换行符
- 用鼠标滚动是反向的
ScrollViewer
,它处理预览鼠标滚轮(MouseWheelEventArgs e)事件,并反转Delta属性。在我看来,这种解决方案最终比选择ScrollToEnd()
更糟糕。。。你仍然有C#codebehind,这是试图避免的。
<TextBox Style="{StaticResource ConsoleTextBox}"/>