enter code here
코드에서 ScrollToVerticalOffset 메서드를 호출 할 때마다 ScrollViewer가 세로로 스크롤되지 않습니다.Silverlight ScrollViewer Not Scrolling
기본적으로 ScrollViewer가 포함 된 내 View (UserControl)이 있습니다. VerticalOffset을 특정 값으로 설정하는 View의 코드 숨김에서 이벤트를 트리거하는 내 ViewModel에서 액션을 호출합니다.
우선, 나는 이것이 매우 추한 것을 알고 있습니다. 이상 적으로는 ViewModel의 속성에 바인딩 할 수있는 부착 가능한 속성이 있으면 좋겠다. 설정하면 VerticalOffset 속성 (읽기 전용 인 경우)이 업데이트되고 ScrollViewer가 스크롤되도록합니다.
ScrollViewer에는 동적 콘텐츠가 포함되어 있습니다. 따라서 사용자가 ScrollViewer에서 내용을보고 반쪽으로 스크롤 한 다음 버튼을 클릭하면 새 내용이 ScrollViewer에로드됩니다. 문제는 ScrollViewer의 수직 오프셋이 재설정되지 않으므로 사용자가 스크롤하여 내용을 읽어야한다는 것입니다. 그래서, 제 솔루션은 ViewModel에서 수직 오프셋을 제어 할 수 있어야했습니다. 그리고 저는 뇌를 깨고 실행 가능한 솔루션을 찾을 수 없으므로 도움을받을 사람을 찾고 있습니다.
덧붙여서 - 나는 attachable 속성을 위해 클래스의 코드를 포함 시켰습니다. 이 속성은 내 ViewModel의 속성에 바인딩됩니다. ViewModel에서 속성을 설정하면이 클래스의 PropertyChanged 콜백 메서드가 올바르게 트리거되고,이 클래스는 ScrollViewer에 대한 ScrollToVerticalOffset 메서드를 호출하지만 ScrollViewer는 여전히 스크롤하지 않습니다. 나는에서 ScrollViewer와 뷰 모델과는 매우 작은 (또는 아무것도)을 가져야한다 "보기"엔티티로 VerticalScrollOffset 모두의 생각으로
public class ScrollViewerHelper
{
public static readonly DependencyProperty BindableOffsetProperty =
DependencyProperty.RegisterAttached("BindableOffset", typeof(double), typeof(ScrollViewerHelper),
new PropertyMetadata(OnBindableOffsetChanged));
public static double GetBindableOffset(DependencyObject d)
{
return (double)d.GetValue(BindableOffsetProperty);
}
public static void SetBindableOffset(DependencyObject d, double value)
{
d.SetValue(BindableOffsetProperty, value);
}
private static void OnBindableOffsetChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
ScrollViewer scrollViewer = d as ScrollViewer;
if (scrollViewer != null)
{
scrollViewer.ScrollToVerticalOffset((double)e.NewValue);
}
}
}
왜이 솔루션이 작동하지 않을지 모르겠다 ... 새로운 요소가 추가 될 때마다 요소 패널의 위쪽 또는 아래쪽에 뷰포트를 고정하려고합니까? 새 요소를 추가 할 때마다 OnBindableOffsetChanged가 호출되는지 확실합니까? 매번 뷰 모델 속성을 0.0으로 설정하는 경우 (맨 위로 스크롤) 처음으로 호출 된 이유와 다시는 볼 수없는 이유를 확인할 수 있습니다. –