2013-01-18 3 views
7

WinRT 용 간단한 응용 프로그램을 작성 중이며 코드에서 TextBox의 맨 아래로 자동 스크롤하는 방법을 찾지 못했습니다. 로그 정보를 TextBox에 쓰고 있으며 스크롤하여 최신 항목을 상자에 표시 할 수 있지만 아무 것도 작동하지 않는 것처럼 보입니다. 아래는 내가 시도한 몇 가지가 있습니다 :어떻게 프로그래밍 방식으로 WinRT의 TextBox 아래로 스크롤합니까?

놓습니다에서 ScrollViewer의 텍스트 상자 :

this.txtLog.Text = this.txtLog.Text + line + "\r\n"; 
ScrollToVerticallOffset(scrollView.ScrollableHeight); 

마지막 텍스트 상자에서 데이터 선택 :

this.txtLog.Select(this.txtLog.Text.Length, 0); 

그러나 아무것도 실제로 원인 않습니다 아래쪽 데이터가 보이도록 스크롤 할 텍스트를 표시합니다.

누구에게 아이디어가 있습니까?

+0

참고. –

+0

죄송합니다. 코드를 번역 할 때 실제로 오타가되었습니다. 내 실제 코드에서는 "ScrollToVerticalOffset"을 사용했습니다. 원래 게시물을 수정하고 있습니다. – Briggs

답변

4

이 작동 :

XAML Winrt XAML Toolkit를 사용

<TextBox 
    x:Name="tb".... 

C#

var sv = tb.GetFirstDescendantOfType<ScrollViewer>(); 
sv.ScrollToVerticalOffsetWithAnimation(sv.ExtentHeight - sv.ViewportHeight); 

.

비 툴킷 방법 : 당신이`대신 ScrollToVerticalOffset` 당신은 당신이 텍스트를 설정 한 후 업데이트 텍스트 상자의 레이아웃 기다릴 필요가 있습니다`의 ScrollToHorizontalOffset`를 호출

Func<DependencyObject, ScrollViewer> getFirstDescendantScrollViewer = null; 
getFirstDescendantScrollViewer = 
    parent => 
    { 
     var c = VisualTreeHelper.GetChildrenCount(parent); 

     for (int i = 0; i < c; i++) 
     { 
      var child = VisualTreeHelper.GetChild(parent, i); 
      var sv = child as ScrollViewer; 
      if (sv != null) 
       return sv; 
      sv = getFirstDescendantScrollViewer(child); 
      if (sv != null) 
       return sv; 
     } 

     return null; 
    }; 

var tbsv = getFirstDescendantScrollViewer(tb); 
tbsv.ScrollToVerticalOffset(tbsv.ScrollableHeight); 
관련 문제