2012-03-15 56 views
0
<ScrollViewer VerticalScrollBarVisibility="Auto" > 
<TextBlock Text="{Binding Status}" 
      HorizontalAlignment="Center" /> 
</ScrollViewer> 

的状态总是我加入到它,也就是说,在后面的代码总是我做这件事情:ScrollViewer控件在WPF

Status+= Environment.NewLine + "Hi"; 

而ScrollViewer中增加,但状态我看到的是第一个,当我想看到最后一个我需要滚动下面看到它时,我的问题是:我如何使Scrollviewer在automaticaly下滚动?这意味着我总是看到最后一个状态不是首先。

对不起英文不好。

回答

1

名称您的ScrollViewer这样你就可以在代码中访问它的背后,是这样的:

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

然后,你可以这样做:

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

随着我做MVVM的方式,我有机会从我的视图ViewModel,所以当视图第一次加载时,我会订阅ViewModel上的PropertyChanged事件,如下所示:

MyViewModel.PropertyChanged += ViewModelChanged; 

然后在ViewModelChanged回调我有这样的:

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

每次视图模型的状态属性改变,现在的ScrollViewer将滚动结束。当您离开该屏幕时,请记住取消订阅MyViewModel.PropertyChanged以避免内存泄漏。

+0

谢谢,但我怎么可以在MVVM模式下做到这一点? – 2012-03-15 13:34:50

+0

在MVVM中,ViewModel不应该知道有关视图的详细信息,例如ScrollViewer的存在。在这种情况下,在视图代码隐藏中编写代码来完成此任务被广泛认为是可以接受的。我将调整我的答案,向您展示如何使用MVVM进行操作。 – 2012-03-15 13:37:39

+0

这是另一种在xaml中做的方法吗? – 2012-03-15 13:52:00