Элемент управления ScrollViewer в Wpf - PullRequest
0 голосов
/ 15 марта 2012
<ScrollViewer VerticalScrollBarVisibility="Auto" >
 <TextBlock Text="{Binding Status}"
            HorizontalAlignment="Center" />
</ScrollViewer>

Статус всегда добавляю к нему, то есть, что в коде всегда я делаю эту вещь:

Status+= Environment.NewLine + "Hi";

И ScrollViewer увеличивается, но статус, который я вижу, является первым, когда я хочу увидеть последний, который мне нужно прокрутить внизу, чтобы увидеть его, мой вопрос: как я могу сделать прокрутку Scrollviewer автоматически под ней? Это означает, что я хочу всегда видеть последний статус, а не первый.

Извините за ломаный английский.

1 Ответ

1 голос
/ 15 марта 2012

Назовите свой ScrollViewer, чтобы вы могли получить к нему доступ в следующем коде, например:

<ScrollViewer x:Name="MyScrollViewer" VerticalScrollBarVisibility="Auto" >
 <TextBlock Text="{Binding Status}"
        HorizontalAlignment="Center" />
</ScrollViewer>

Затем вы можете сделать это:

Status+= Environment.NewLine + "Hi";
MyScrollViewer.ScrollToEnd(); 

С тем, как я делаю MVVM,У меня есть доступ к моей ViewModel из моего View, поэтому при первой загрузке View я подписываюсь на событие PropertyChanged в моей ViewModel следующим образом:

MyViewModel.PropertyChanged += ViewModelChanged;

и затем в обратном вызове ViewModelChangedthis:

private void ViewModelChanged(object sender, PropertyChangedEventArgs e)
{
    if (e.PropertyName == "Status")
        MyScrollViewer.ScrollToEnd();
}

Каждый раз, когда свойство ViewModel изменяется, ScrollViewer теперь прокручивается до конца.Просто не забудьте отписаться от MyViewModel.PropertyChanged при выходе из этого экрана, чтобы избежать утечки памяти.

...