例如像Visual Studio“输出”窗口那样。
有没有办法在XAML中执行此操作?
答案 0 :(得分:45)
您可以随时向该TextBox添加内容,或者当您收听事件时,TextChanged会触发此方法:
TextBoxBase.ScrollToEnd()
答案 1 :(得分:8)
你可以写一个attached property甚至更好的behavior来收听回调中的TextChanged event和scrolls to the bottom。
答案 2 :(得分:3)
Visual Studio输出窗口行为是特殊的,因为如果插入符号位于文本框的末尾,它将仅保持自动向下滚动,这允许您在不添加新行的情况下检查输出而不会受到干扰。 / p>
我有这个代码的行为
bool scrollToEnd = TbEvents.CaretIndex == TbEvents.Text.Length;
TbEvents.AppendText(text + Environment.NewLine);
if (scrollToEnd)
{
TbEvents.CaretIndex = TbEvents.Text.Length;
TbEvents.ScrollToEnd();
}
答案 3 :(得分:3)
有一种方法可以在XAML中执行,你可以使用这个样式来显示它就像一个控制台(注意缺点,它看起来像一个控制台但不完全像它一样)
<Style x:Key="ConsoleTextBox" TargetType="{x:Type TextBox}">
<Setter Property="IsReadOnly" Value="True"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="TextBox">
<ScrollViewer RenderTransformOrigin="0.5,0.5" VerticalScrollBarVisibility="Auto">
<ScrollViewer.RenderTransform>
<ScaleTransform ScaleY="-1"/>
</ScrollViewer.RenderTransform>
<TextBox Text="{TemplateBinding Text}" RenderTransformOrigin="0.5,0.5">
<TextBox.RenderTransform>
<ScaleTransform ScaleY="-1"/>
</TextBox.RenderTransform>
</TextBox>
</ScrollViewer>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
如何运作
在TextBox中,ScrollViewer垂直翻转(&#34;新的&#34;行添加在底部)
在ScrollViewer中,还有另一个文本框,可以垂直翻转以正确显示文本(不是颠倒)。
使用样式
将其包含在App.xaml中或通过ResourceDictionary包含,并将TextBox的样式设置为ConsoleTextBox。
<TextBox Style="{StaticResource ConsoleTextBox}"/>
<强>缺点强>