Después de mucho batallar ya dimos con el resultado de este conflicto que tantos usuarios de este espacio han presentado. Si deseas aportar algo más no dudes en dejar tu conocimiento.
Solución:
De acuerdo con esta pregunta: TextBox.ScrollToEnd no funciona cuando TextBox está en una pestaña no activa
Tienes que enfocar el cuadro de texto, actualizar la posición del símbolo de intercalación y luego desplazarte hasta el final:
Status.Focus();
Status.CaretIndex = Status.Text.Length;
Status.ScrollToEnd();
EDITAR
Cuadro de texto de ejemplo:
Si lo convierte en un control personalizado simple, entonces no necesita ningún código para hacer el desplazamiento.
public class ScrollingTextBox : TextBox
protected override void OnInitialized (EventArgs e)
base.OnInitialized(e);
VerticalScrollBarVisibility = ScrollBarVisibility.Auto;
HorizontalScrollBarVisibility = ScrollBarVisibility.Auto;
protected override void OnTextChanged (TextChangedEventArgs e)
base.OnTextChanged(e);
CaretIndex = Text.Length;
ScrollToEnd();
Si está utilizando WPF, sería mucho mejor usar el enlace en lugar de pasar el cuadro de texto en el código subyacente.
Si no le gusta mucho el código subyacente, aquí hay una propiedad adjunta que hará el truco:
namespace YourProject.YourAttachedProperties
public class TextBoxAttachedProperties
public static bool GetAutoScrollToEnd(DependencyObject obj)
return (bool)obj.GetValue(AutoScrollToEndProperty);
public static void SetAutoScrollToEnd(DependencyObject obj, bool value)
obj.SetValue(AutoScrollToEndProperty, value);
// Using a DependencyProperty as the backing store for AutoScrollToEnd. This enables animation, styling, binding, etc...
public static readonly DependencyProperty AutoScrollToEndProperty =
DependencyProperty.RegisterAttached("AutoScrollToEnd", typeof(bool), typeof(TextBoxAttachedProperties), new PropertyMetadata(false, AutoScrollToEndPropertyChanged));
private static void AutoScrollToEndPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
if(d is TextBox textbox && e.NewValue is bool mustAutoScroll && mustAutoScroll)
textbox.TextChanged += (s, ee)=> AutoScrollToEnd(s, ee, textbox);
private static void AutoScrollToEnd(object sender, TextChangedEventArgs e, TextBox textbox)
textbox.ScrollToEnd();
Y luego en tu xaml solo haz:
Simplemente no olvide agregar en la parte superior de su archivo xaml
xmlns:myAttachedProperties="clr-namespace:YourProject.YourAttachedProperties"
Y voilá
Valoraciones y comentarios
Nos encantaría que puedieras difundir esta sección si te fue de ayuda.