Например, например, в окне Visual Studio "Выход".
Есть ли способ сделать это в XAML?
Например, например, в окне Visual Studio "Выход".
Есть ли способ сделать это в XAML?
Вы можете всякий раз, когда вы добавляете контент в этот TextBox или когда вы слушаете событие TextChanged, этот метод:
TextBoxBase.ScrollToEnd()
.
Вы можете написать прикрепленное свойство или даже лучше behavior, который прослушивает событие 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, вы можете использовать этот стиль, чтобы отобразить его так, как это делает консоль (знайте о недостатках, он просто выглядит как консоль, но ведет себя не совсем так, как он)
<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 переворачивается вертикально ("новые" строки добавляются внизу)
В ScrollViewer есть еще одно текстовое поле, которое перевернуто по вертикали для правильного отображения текста (не вверх ногами).
Используя Стиль
Включите его в свой App.xaml или через ResourceDictionary и установите для стиля TextBox значение ConsoleTextBox.
<TextBox Style="{StaticResource ConsoleTextBox}"/>
Недостатки