Scrolling to the end of a single line WPF TextBox

前端 未结 3 1400
梦谈多话
梦谈多话 2020-12-18 03:20

This seems like such a simple thing but I just can\'t get it to work.

I have a single line text box that has a lot of text. What I want to happen is that whenever t

相关标签:
3条回答
  • 2020-12-18 03:42

    It is true - setting the caret property from code doesn't affect the view; and the caret can go outside the visible part.

    kb_target_box.Focus(); // just for sure
    Rect rect = kb_target_box.GetRectFromCharacterIndex(kb_target_box.CaretIndex);
    kb_target_box.ScrollToHorizontalOffset(Math.Max((kb_target_box.HorizontalOffset + rect.Left - (kb_target_box.ActualWidth - 40)), 0.0));
    

    h-scroll will follow the caret after it comes closer than 40 to the right TextBox border.

    0 讨论(0)
  • 2020-12-18 03:49

    This worked for me.

    textBox.CaretIndex = txt.Text.Length;  
    textBox.ScrollToEnd();
    
    0 讨论(0)
  • 2020-12-18 03:53

    You should be able to do it using these members:

    • TextBoxBase.ScrollToEnd
    • TextBox.CaretIndex

    EDIT: not sure why ScrollToEnd isn't working... Anyway, this code works:

    textBox.CaretIndex = textBox.Text.Length;
    var rect = textBox.GetRectFromCharacterIndex(textBox.CaretIndex);
    textBox.ScrollToHorizontalOffset(rect.Right);
    
    0 讨论(0)
提交回复
热议问题