簡體   English   中英

UWP C#滾動到TextBox的底部

[英]UWP C# Scroll to the bottom of TextBox

如何滾動到UWP應用的文本框底部?

隨着我的過渡到UWP,這一直是尚未直截了當的問題之一。

我曾經可以使用這樣的:

textBox.SelectionStart = textBox.TextLength;
textBox.ScrollToCaret();

但是,這不適用於UWP應用

使用https://code.msdn.microsoft.com/windowsapps/How-to-scroll-to-the-a8ea5867中的答案有時會導致向上滾動時刪除行。

要解決此問題,請嘗試以下操作:

private void ScrollToBottom(TextBox textBox)
{
    var grid = (Grid)VisualTreeHelper.GetChild(textBox, 0);
    for (var i = 0; i <= VisualTreeHelper.GetChildrenCount(grid) - 1; i++)
    {
        object obj = VisualTreeHelper.GetChild(grid, i);
        if (!(obj is ScrollViewer)) continue;
        ((ScrollViewer)obj).ChangeView(0.0f, ((ScrollViewer)obj).ExtentHeight, 1.0f, true);
        break;
    }
}

主要區別是此行:

((ScrollViewer)obj).ChangeView(0.0f, ((ScrollViewer)obj).ExtentHeight, 1.0f, true);

我也將方法與事件處理程序分開,因為我不想每次更改文本時都必須滾動。

如果有人需要滾動到UWP應用程序中TextBox的底部,請執行以下操作:

https://code.msdn.microsoft.com/windowsapps/How-to-scroll-to-the-a8ea5867

private void TextBox_TextChanged(object sender, TextChangedEventArgs e) 
{ 
    var grid = (Grid)VisualTreeHelper.GetChild(textBox1, 0); 
    for (var i = 0; i <= VisualTreeHelper.GetChildrenCount(grid) - 1; i++) 
        { 
            object obj = VisualTreeHelper.GetChild(grid, i); 
            if (!(obj is ScrollViewer)) continue; 
            ((ScrollViewer)obj).ChangeView(0.0f, ((ScrollViewer)obj).ExtentHeight, 1.0f); 
            break; 
        } 
    }
}

其中,textBox1是要滾動到底部的TextBox。

等效於C ++ / CX中的先前答案:

using Windows::UI::Xaml::Media::VisualTreeHelper;
using Windows::UI::Xaml::Controls::Grid;
using Windows::UI::Xaml::Controls::ScrollViewer;
using Platform::Object;

void
MainPage::responseTextUpdated(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
{
    Grid^ grid = static_cast<Grid^>(VisualTreeHelper::GetChild(responseText, 0));
    for (int i = 0; i < VisualTreeHelper::GetChildrenCount(grid); ++i)
    {
        Object^ child = VisualTreeHelper::GetChild(grid, i);
        ScrollViewer^ scrollViewer = dynamic_cast<ScrollViewer^>(child);
        if (scrollViewer == nullptr) continue;

        double const horizontalOffset = 0;
        double const verticalOffset = scrollViewer->ExtentHeight;
        float const zoomFactor = 1;

        scrollViewer->ChangeView(horizontalOffset, verticalOffset, zoomFactor);
        break;
    }
}

其中responseText是TextBox^ responseText ,您要滾動的TextBox(可能與發件人相同)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM