2014-09-17 2 views
2

나는 LongListSelector에 메시지를 표시하는 채팅 응용 프로그램이 있으며 ObservableCollection.Insert(0, message) 문으로 새로운 메시지를 추가합니다.새 항목 추가시 스크롤 LongListSelector

제 문제는 새 메시지를 추가 할 때 LongListSelector가 새 메시지로 스크롤하지 않는다는 것입니다.

내 의견으로는 LongListSelector가 현재 상단으로 스크롤되는 경우 자동으로 새 메시지로 스크롤하는 것이 가장 좋지만 현재 스크롤하는 위치를 감지하는 방법을 찾을 수는 없습니다 (도움이되지 않는 경우에만 LongListSelector.ScrollTo()이 표시됨).).

현재 LongListSelector가 맨 위로 스크롤 될 때 자동으로 새 메시지로 스크롤 할 수 있습니까?

+0

왜 ScrollTo가 도움이되지 않는지 설명해 주시겠습니까? 컬렉션에 삽입 한 개체 "메시지"를 제공하면 해당 개체로 스크롤됩니다. 그게 네가 원하는거야 - 맞지? – eX0du5

+0

@ eX0du5, 네, 그게 내가 원하는 것입니다. 그러나 LongListSelector가 현재 상단으로 스크롤되는 경우에만 자동 스크롤을 활성화해야합니다. – BArtWell

답변

2

VisualTreeHelper를 사용하여 longlistselector에서 스크롤 막대를 가져와야하는 것보다 현재 스크롤 위치를 찾아야하는 경우.

예제 함수 :

public static class VisualChildExtractHelper 
{ 

    public static T FindChildOfType<T>(DependencyObject root) where T : class 
    { 
    var queue = new Queue<DependencyObject>(); 
    queue.Enqueue(root); 

    while (queue.Count > 0) 
    { 
     DependencyObject current = queue.Dequeue(); 
     for (int i = VisualTreeHelper.GetChildrenCount(current) - 1; 0 <= i; i--) 
     { 
      var child = VisualTreeHelper.GetChild(current, i); 
      var typedChild = child as T; 
      if (typedChild != null) 
      { 
       return typedChild; 
      } 
      queue.Enqueue(child); 
     } 
    } 
    return null; 
    } 
} 

사용 : 당신이 스크롤바 값 (또는의 valueChanged 이벤트)에 액세스하고 0과 같으면 확인할 수 있습니다 후

ScrollBar LongListSelectorScrollBar = VisualChildExtractHelper.FindChildOfType<ScrollBar>(yourLongListSelectorName); 

(즉 longlistselector가에 스크롤되는 것을 의미 상단) 또는 다른 조건. 이 경우 LongListSelector의 ScrollTo 메소드를 사용하여 요소를 뷰로 가져올 수 있습니다.

+0

답변 해 주셔서 감사합니다! 그러나'VisualChildExtractHelper.FindChildOfType (yourLongListSelectorName)'은 항상 null을 반환합니다. 문제가 어디에 있을까요? – BArtWell

+0

FindChildOfType 메서드에서 child! = null이지만 typedChild는 항상 null입니다. 내가보기에 문제가있다. 그것을 고치는 방법? – BArtWell

+1

죄송 합니다만, LongListSelector에는 scrollviewer가 포함되어 있지 않은 것처럼 보입니다. ScrollViewer는 Listbox 안에 있습니다. 그러나 LongListSelector 및 해당 Value Property 및 ValueChanged 이벤트 내에 ScrollBar가 있습니다. 내 업데이트 답변을 참조하십시오. –

관련 문제